HHH-15794 Add test for issue
This commit is contained in:
parent
2ed4d2c87b
commit
17e48d2ace
|
@ -0,0 +1,150 @@
|
|||
package org.hibernate.orm.test.embeddable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
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.Test;
|
||||
|
||||
import jakarta.persistence.CascadeType;
|
||||
import jakarta.persistence.ElementCollection;
|
||||
import jakarta.persistence.Embeddable;
|
||||
import jakarta.persistence.Embedded;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
@DomainModel(
|
||||
annotatedClasses = {
|
||||
NestedEmbeddedWitnNotOptionalManyToOneTest.TestEntity.class,
|
||||
NestedEmbeddedWitnNotOptionalManyToOneTest.ChildEntity.class
|
||||
}
|
||||
|
||||
)
|
||||
@SessionFactory
|
||||
public class NestedEmbeddedWitnNotOptionalManyToOneTest {
|
||||
|
||||
@Test
|
||||
public void testIt(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
ChildEntity child = new ChildEntity( 2, "child" );
|
||||
SecondEmbeddable secondEmbeddable = new SecondEmbeddable( child );
|
||||
FirstEmbeddable embedded = new FirstEmbeddable();
|
||||
embedded.addEntry( secondEmbeddable );
|
||||
TestEntity testEntity = new TestEntity( 1, "test", embedded );
|
||||
session.persist( child );
|
||||
session.persist( testEntity );
|
||||
}
|
||||
);
|
||||
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
TestEntity testEntity = session.get( TestEntity.class, 1 );
|
||||
assertNotNull( testEntity );
|
||||
FirstEmbeddable embeddedAttribute = testEntity.getEmbeddedAttribute();
|
||||
assertNotNull( embeddedAttribute );
|
||||
Set<SecondEmbeddable> entries = embeddedAttribute.getEntries();
|
||||
assertThat( entries.size() ).isEqualTo( 1 );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity(name = "TestEntity")
|
||||
public static class TestEntity {
|
||||
|
||||
@Id
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
@Embedded
|
||||
private FirstEmbeddable embeddedAttribute;
|
||||
|
||||
public TestEntity() {
|
||||
}
|
||||
|
||||
public TestEntity(Integer id, String name, FirstEmbeddable embeddedAttribute) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.embeddedAttribute = embeddedAttribute;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public FirstEmbeddable getEmbeddedAttribute() {
|
||||
return embeddedAttribute;
|
||||
}
|
||||
}
|
||||
|
||||
@Entity
|
||||
public static class ChildEntity {
|
||||
@Id
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
public ChildEntity() {
|
||||
}
|
||||
|
||||
public ChildEntity(Integer id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Embeddable
|
||||
public static class FirstEmbeddable {
|
||||
|
||||
@ElementCollection
|
||||
private Set<SecondEmbeddable> entries = new HashSet<>();
|
||||
|
||||
|
||||
public void addEntry(SecondEmbeddable entry) {
|
||||
this.entries.add( entry );
|
||||
}
|
||||
|
||||
public Set<SecondEmbeddable> getEntries() {
|
||||
return entries;
|
||||
}
|
||||
}
|
||||
|
||||
@Embeddable
|
||||
public static class SecondEmbeddable {
|
||||
|
||||
@ManyToOne(optional = false, cascade = CascadeType.ALL)
|
||||
private ChildEntity child;
|
||||
|
||||
public SecondEmbeddable() {
|
||||
}
|
||||
|
||||
public SecondEmbeddable(ChildEntity child) {
|
||||
this.child = child;
|
||||
}
|
||||
|
||||
public ChildEntity getChild() {
|
||||
return child;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue