Thank you very much. Nemanja J.
The second problem is a known problem. I will open a JIRA for it. --- On Sun, 3/29/09, Nemanja Joksovic <[email protected]> wrote: > From: Nemanja Joksovic <[email protected]> > Subject: Identity class and parent/children entity relationship > To: [email protected] > Date: Sunday, March 29, 2009, 5:33 AM > Hi all, > > I've been experiencing few problems with Identity class > and Parent/Children entity relationship. I tried with both > OpenJPA 1.2.1 and 2.0.0-SNAPSHOT. I have a very simple test > case which can briefly explain problems: > > @Entity > public class Parent implements Serializable { > > private long id; > .... > private List<Child> children = new > LinkedList<Child>(); > > @Id > // @GeneratedValue(strategy = GenerationType.IDENTITY) > @Column(name = "id", unique = true, > insertable = false, updatable = false, nullable = false) > public long getId() { > return id; > } > > public void setId(long id) { > this.id = id; > } > > ... > > @OneToMany(cascade = CascadeType.ALL, mappedBy = > "parent") > public List<Child> getChildren() { > return children; > } > > public void addChild(Child child) { > if (child == null) { > throw new IllegalArgumentException("Cannot > add a null Child"); > } > this.getChildren().add(child); > } > > public void setChildren(List<Child> children) { > this.children = children; > } > } > > @Entity > @IdClass(ChildId.class) > public class Child implements Serializable { > > private long id; > ... > private Parent parent; > > @Id > @Column(name = "id", unique = false, nullable > = false) > public long getId() { > return id; > } > > public void setId(long id) { > this.id = id; > } > > ... > > @Id > @ManyToOne > @JoinColumn(name = "parent_id", > referencedColumnName = "id") > public Parent getParent() { > return parent; > } > > public void setParent(Parent parent) { > this.parent = parent; > } > } > > ChidId is generated with the Application Identity Tool: > > public class ChildId implements Serializable { > ... > public long id; > public long parent; > ... > } > > 1) Merge operation fail in any case with following > exception: > > java.lang.NullPointerException > at > net.company.persistence.Child.pcCopyKeyFieldsFromObjectId(Child.java) > at > net.company.persistence.Child.pcNewInstance(Child.java) > at > org.apache.openjpa.kernel.AttachStrategy.persist(AttachStrategy.java:93) > at > org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:100) > at > org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) > at > org.apache.openjpa.kernel.AttachStrategy.attachCollection(AttachStrategy.java:333) > at > org.apache.openjpa.kernel.AttachStrategy.replaceList(AttachStrategy.java:359) > at > org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:223) > at > org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153) > at > org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) > at > org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:101) > at > org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3212) > ... 25 more > > > The problem is caused by the call > pc.NewInstance(AttachStrategy:93) with null state manager > instance which is used in pcCopyKeyFieldsFromObjectId(..): > > pcsetParent((Parent)pcStateManager.getPCPrimaryKey(childid, > 2 + pcInheritedFieldCount)); > > Also, for same problem exists JIRA Issue: > https://issues.apache.org/jira/browse/OPENJPA-218 > > > 2) Persist working fine, but it's fail in the case when > Parent.id is Generated Value field with following exception: > > <openjpa-1.2.1-r752877:753278 fatal user error> > org.apache.openjpa.persistence.InvalidStateException: > Detected reentrant flush. Make sure your flush-time > instance callback methods or event listeners do not invoke > any operations that require the in-progress flush to > complete. > at > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1904) > at > org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679) > at > org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:524) > at > org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:506) > at > org.apache.openjpa.kernel.StateManagerImpl.fetchObjectId(StateManagerImpl.java:1434) > at > net.company.persistence.Parent.pcFetchObjectId(Parent.java) > at > net.company.persistence.Child.pcCopyKeyFieldsToObjectId(Child.java) > > > Does exists some workaround for these problems ? > > Regards, > Nemanja J. > -- > View this message in context: > http://n2.nabble.com/Identity-class-and-parent-children-entity-relationship-tp2552430p2552430.html > Sent from the OpenJPA Users mailing list archive at > Nabble.com. -- View this message in context: http://n2.nabble.com/Identity-class-and-parent-children-entity-relationship-tp2552430p2558373.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
