HHH-17140 Add test for issue
This commit is contained in:
parent
4e524f67c5
commit
1efc90754e
|
@ -2,6 +2,8 @@ package org.hibernate.orm.test.annotations.inheritance;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.Hibernate;
|
||||||
|
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
||||||
import org.hibernate.testing.orm.junit.Jpa;
|
import org.hibernate.testing.orm.junit.Jpa;
|
||||||
|
@ -24,6 +26,8 @@ import jakarta.persistence.Query;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import jakarta.persistence.Version;
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
||||||
@Jpa(
|
@Jpa(
|
||||||
annotatedClasses = {
|
annotatedClasses = {
|
||||||
|
@ -69,7 +73,12 @@ public class SingleTableInheritanceLazyAssociationTest {
|
||||||
|
|
||||||
for ( Message message : resultList ) {
|
for ( Message message : resultList ) {
|
||||||
Address address = message.getAddress();
|
Address address = message.getAddress();
|
||||||
|
assertThat( Hibernate.isInitialized( address ) ).isFalse();
|
||||||
address.getId();
|
address.getId();
|
||||||
|
assertThat( Hibernate.isInitialized( address ) ).isTrue();
|
||||||
|
User user = address.getUser();
|
||||||
|
assertThat( Hibernate.isInitialized( user ) ).isTrue();
|
||||||
|
assertThat( Hibernate.isInitialized( user.getAddress() ) ).isTrue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -205,6 +214,8 @@ public class SingleTableInheritanceLazyAssociationTest {
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return this.userId;
|
return this.userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract Address getAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Entity(name = "UserA")
|
@Entity(name = "UserA")
|
||||||
|
@ -222,6 +233,11 @@ public class SingleTableInheritanceLazyAssociationTest {
|
||||||
super( userId );
|
super( userId );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AddressA getAddress() {
|
||||||
|
return addressA;
|
||||||
|
}
|
||||||
|
|
||||||
public void setAddressA(AddressA addressA) {
|
public void setAddressA(AddressA addressA) {
|
||||||
this.addressA = addressA;
|
this.addressA = addressA;
|
||||||
}
|
}
|
||||||
|
@ -242,6 +258,11 @@ public class SingleTableInheritanceLazyAssociationTest {
|
||||||
super( userId );
|
super( userId );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AddressB getAddress() {
|
||||||
|
return addressB;
|
||||||
|
}
|
||||||
|
|
||||||
public void setAddressB(AddressB addressB) {
|
public void setAddressB(AddressB addressB) {
|
||||||
this.addressB = addressB;
|
this.addressB = addressB;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,238 @@
|
||||||
|
package org.hibernate.orm.test.associations;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.ForeignKey;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
|
||||||
|
import static jakarta.persistence.ConstraintMode.NO_CONSTRAINT;
|
||||||
|
|
||||||
|
@DomainModel(
|
||||||
|
annotatedClasses = {
|
||||||
|
ManyToOneBidirectionalTest.OrderEntity.class,
|
||||||
|
ManyToOneBidirectionalTest.OrderItem.class,
|
||||||
|
ManyToOneBidirectionalTest.Product.class,
|
||||||
|
ManyToOneBidirectionalTest.Sku.class,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@SessionFactory
|
||||||
|
@JiraKey("HHH-17140")
|
||||||
|
public class ManyToOneBidirectionalTest {
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public void setUp(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
Product p = new Product( 1l, "abc" );
|
||||||
|
|
||||||
|
Sku sku = new Sku( 1l, "sku", p );
|
||||||
|
|
||||||
|
OrderItem item = new OrderItem( 1L, sku, p );
|
||||||
|
|
||||||
|
OrderEntity orderEntity = new OrderEntity( 1l );
|
||||||
|
orderEntity.setItems( Arrays.asList( item ) );
|
||||||
|
|
||||||
|
session.persist( p );
|
||||||
|
session.persist( sku );
|
||||||
|
session.persist( item );
|
||||||
|
session.persist( orderEntity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFindFolloweByAGet(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
OrderEntity order = session.find( OrderEntity.class, 1l );
|
||||||
|
order.getItems().get( 0 );
|
||||||
|
Sku responseItem = session.get( Sku.class, 1l );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "OrderEntity")
|
||||||
|
public static class OrderEntity {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
@OneToMany
|
||||||
|
List<OrderItem> items;
|
||||||
|
|
||||||
|
public OrderEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrderEntity(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<OrderItem> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItems(List<OrderItem> items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "OrderItem")
|
||||||
|
public static class OrderItem {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY, optional = false)
|
||||||
|
@JoinColumn(name = "SKU_ID", nullable = false)
|
||||||
|
private Sku sku;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "PRODUCT_ID")
|
||||||
|
protected Product product;
|
||||||
|
|
||||||
|
public OrderItem() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrderItem(Long id, Sku sku, Product product) {
|
||||||
|
this.id = id;
|
||||||
|
this.sku = sku;
|
||||||
|
this.product = product;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sku getSku() {
|
||||||
|
return sku;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSku(Sku sku) {
|
||||||
|
this.sku = sku;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Product getProduct() {
|
||||||
|
return product;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProduct(Product product) {
|
||||||
|
this.product = product;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Product")
|
||||||
|
public static class Product {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "DEFAULT_SKU_ID")
|
||||||
|
private Sku defaultSku;
|
||||||
|
|
||||||
|
public Product() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Product(Long id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sku getDefaultSku() {
|
||||||
|
return defaultSku;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultSku(Sku defaultSku) {
|
||||||
|
this.defaultSku = defaultSku;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Sku")
|
||||||
|
public static class Sku {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "DEFAULT_PRODUCT_ID", foreignKey = @ForeignKey(NO_CONSTRAINT))
|
||||||
|
protected Product defaultProduct;
|
||||||
|
|
||||||
|
public Sku() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sku(Long id, String name, Product product) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.defaultProduct = product;
|
||||||
|
defaultProduct.setDefaultSku( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Product getDefaultProduct() {
|
||||||
|
return defaultProduct;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultProduct(Product defaultProduct) {
|
||||||
|
this.defaultProduct = defaultProduct;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue