HHH-6043 PostLoad method invoked before collection initialised
This commit is contained in:
parent
121f495ff8
commit
67beb085d3
|
@ -0,0 +1,35 @@
|
||||||
|
package org.hibernate.jpa.test.collection;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Child {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
private Parent daddy;
|
||||||
|
|
||||||
|
public Child() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
@ManyToOne
|
||||||
|
public Parent getDaddy() {
|
||||||
|
return daddy;
|
||||||
|
}
|
||||||
|
public void setDaddy(Parent daddy) {
|
||||||
|
this.daddy = daddy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.hibernate.jpa.test.collection;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.FetchType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.PostLoad;
|
||||||
|
import javax.persistence.Transient;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Parent {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
private Set<Child> children = new HashSet<Child>();
|
||||||
|
private int nrOfChildren;
|
||||||
|
|
||||||
|
public Parent() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
@OneToMany(mappedBy="daddy", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
|
||||||
|
public Set<Child> getChildren() {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
public void setChildren(Set<Child> children) {
|
||||||
|
this.children = children;
|
||||||
|
//children.size(); // This will result in the same exception as the PostLoad method...
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostLoad
|
||||||
|
public void postLoad() {
|
||||||
|
nrOfChildren = children.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
public int getNrOfChildren() {
|
||||||
|
return nrOfChildren;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.hibernate.jpa.test.collection;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||||
|
import org.hibernate.testing.FailureExpected;
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@TestForIssue( jiraKey="HHH-6043" )
|
||||||
|
public class PostLoadTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load an entity with a collection of associated entities, that uses a @PostLoad method to
|
||||||
|
* access the association.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@FailureExpected( jiraKey="HHH-6043" )
|
||||||
|
public void testAccessAssociatedSetInPostLoad() {
|
||||||
|
Child child = new Child();
|
||||||
|
child.setId(1);
|
||||||
|
Parent daddy = new Parent();
|
||||||
|
daddy.setId(1);
|
||||||
|
child.setDaddy(daddy);
|
||||||
|
Set<Child> children = new HashSet<Child>();
|
||||||
|
children.add(child);
|
||||||
|
daddy.setChildren(children);
|
||||||
|
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
|
||||||
|
em.getTransaction().begin();
|
||||||
|
em.persist(daddy);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.clear();
|
||||||
|
|
||||||
|
daddy = em.find(Parent.class, 1);
|
||||||
|
assertEquals(1, daddy.getNrOfChildren());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class[] { Child.class, Parent.class };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue