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.

Reply via email to