HHH-15279 Add test for issue
This commit is contained in:
parent
e05b99658f
commit
4066fe0445
|
@ -0,0 +1,142 @@
|
||||||
|
package org.hibernate.orm.test.onetoone.embeddedid;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.query.Query;
|
||||||
|
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Embeddable;
|
||||||
|
import jakarta.persistence.Embedded;
|
||||||
|
import jakarta.persistence.EmbeddedId;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinColumns;
|
||||||
|
import jakarta.persistence.OneToOne;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import jakarta.persistence.criteria.CriteriaQuery;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
|
||||||
|
@DomainModel(
|
||||||
|
annotatedClasses = {
|
||||||
|
OneToOneMultiLevelEmbeddedId.Primary.class,
|
||||||
|
OneToOneMultiLevelEmbeddedId.Secondary.class
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@SessionFactory
|
||||||
|
@TestForIssue(jiraKey = "HHH-15279")
|
||||||
|
public class OneToOneMultiLevelEmbeddedId {
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final TopId id = new TopId( 1, 2 );
|
||||||
|
final Secondary secondary = new Secondary( id );
|
||||||
|
final Primary primary = new Primary( secondary );
|
||||||
|
|
||||||
|
session.persist( secondary );
|
||||||
|
session.persist( primary );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIt(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final HibernateCriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
|
||||||
|
|
||||||
|
final CriteriaQuery<Primary> query = criteriaBuilder.createQuery( Primary.class );
|
||||||
|
|
||||||
|
query.select( query.from( Primary.class ) );
|
||||||
|
|
||||||
|
final Query<Primary> typedQuery = session.createQuery( query );
|
||||||
|
final List<Primary> results = typedQuery.getResultList();
|
||||||
|
assertThat( results.size(), is( 1 ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public static class NestedId {
|
||||||
|
|
||||||
|
private int nid;
|
||||||
|
|
||||||
|
public NestedId() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public NestedId(int nid) {
|
||||||
|
this.nid = nid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public static class TopId {
|
||||||
|
|
||||||
|
private int tid;
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
private NestedId nestedId;
|
||||||
|
|
||||||
|
public TopId() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopId(int tid, int nid) {
|
||||||
|
this.tid = tid;
|
||||||
|
this.nestedId = new NestedId( nid );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Secondary")
|
||||||
|
@Table(name = "secondary_table")
|
||||||
|
public static class Secondary {
|
||||||
|
|
||||||
|
@EmbeddedId
|
||||||
|
private TopId id;
|
||||||
|
|
||||||
|
public Secondary() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Secondary(TopId id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopId getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Primary")
|
||||||
|
@Table(name = "primary_table")
|
||||||
|
public static class Primary {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@OneToOne
|
||||||
|
@JoinColumns({
|
||||||
|
@JoinColumn(name = "ptid", referencedColumnName = "tid"),
|
||||||
|
@JoinColumn(name = "pnid", referencedColumnName = "nid")
|
||||||
|
})
|
||||||
|
private Secondary secondary;
|
||||||
|
|
||||||
|
public Primary() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Primary(Secondary secondary) {
|
||||||
|
this.secondary = secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Secondary getSecondary() {
|
||||||
|
return secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue