You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Eddie Man (JIRA)" <ji...@apache.org> on 2007/09/04 08:56:58 UTC
[jira] Created: (OPENJPA-348) Composite PK with association
Composite PK with association
-----------------------------
Key: OPENJPA-348
URL: https://issues.apache.org/jira/browse/OPENJPA-348
Project: OpenJPA
Issue Type: Bug
Components: kernel
Affects Versions: 1.0.0
Reporter: Eddie Man
I got an exception while using a association within a composite PK
A.java
========
@Entity
public class A {
@Id
public int id;
@OneToMany(mappedBy="a", cascade=CascadeType.ALL)
public HashSet<B> bs = new HashSet<B>();
}
B.java
========
@Entity
@IdClass(BPK.class)
public class B {
@Id
public int id;
@Id
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="aid")})
public A a;
@Basic
public String name;
}
BPK.class
============
public class BPK {
public int id;
public int a;
@Override
public boolean equals(Object aObj) {
return super.equals(aObj);
}
@Override
public int hashCode() {
return super.hashCode();
}
}
Here is my code for inserting data to db:
EntityManager manager = Persistence.createEntityManagerFactory("openjpa").createEntityManager();
EntityTransaction transaction = manager.getTransaction();
transaction.begin();
A a = new A();
a.id = 1;
B b = new B();
b.id = 2;
b.a = a;
a.bs.add(b);
manager.persist(a);
transaction.commit();
manager.close();
Exception :
==============
Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
at Test.main(Test.java:10)
Caused by: java.lang.NullPointerException
at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
... 6 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
RE: [jira] Created: (OPENJPA-348) Composite PK with association
Posted by Pinaki Poddar <pp...@bea.com>.
The persistent fields including the identity fields are all declared
public and being accessed/mutated publicly by the test class.
Firstly, public-ness of persistent field is not a good practice.
Secondly, if a class X is not persistent by itself but directly
manipulating public fields of a Entity class Y, then X is termed as
Persistent-Aware. Persistent-Aware classes need no special annotation
but requires to be enhanced.
In this case, Test class is persistence-aware and most likely has not
been enhanced.
Pinaki Poddar
972.834.2865
>-----Original Message-----
>From: Eddie Man (JIRA) [mailto:jira@apache.org]
>Sent: Tuesday, September 04, 2007 1:57 AM
>To: dev@openjpa.apache.org
>Subject: [jira] Created: (OPENJPA-348) Composite PK with association
>
>Composite PK with association
>-----------------------------
>
> Key: OPENJPA-348
> URL: https://issues.apache.org/jira/browse/OPENJPA-348
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.0.0
> Reporter: Eddie Man
>
>
>I got an exception while using a association within a composite PK
>
>A.java
>========
>@Entity
>public class A {
> @Id
> public int id;
>
> @OneToMany(mappedBy="a", cascade=CascadeType.ALL)
> public HashSet<B> bs = new HashSet<B>();
>
>}
>
>B.java
>========
>@Entity
>@IdClass(BPK.class)
>public class B {
>
> @Id
> public int id;
>
> @Id
> @ManyToOne(cascade=CascadeType.ALL)
> @JoinColumns({@JoinColumn(name="aid")})
> public A a;
>
> @Basic
> public String name;
>}
>
>BPK.class
>============
>public class BPK {
>
> public int id;
>
> public int a;
>
> @Override
> public boolean equals(Object aObj) {
> return super.equals(aObj);
> }
>
> @Override
> public int hashCode() {
> return super.hashCode();
> }
>}
>
>
>Here is my code for inserting data to db:
>EntityManager manager =
>Persistence.createEntityManagerFactory("openjpa").createEntityM
>anager();
>EntityTransaction transaction = manager.getTransaction();
>transaction.begin();
>
>A a = new A();
>a.id = 1;
>
>B b = new B();
>b.id = 2;
>b.a = a;
>
>a.bs.add(b);
>
>manager.persist(a);
>transaction.commit();
>manager.close();
>
>Exception :
>==============
>Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal
>general error>
>org.apache.openjpa.persistence.PersistenceException: null
> at
>org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentT
>ypes(AbstractBrokerFactory.java:303)
> at
>org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(Abstr
>actBrokerFactory.java:197)
> at
>org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(Del
>egatingBrokerFactory.java:142)
> at
>org.apache.openjpa.persistence.EntityManagerFactoryImpl.createE
>ntityManager(EntityManagerFactoryImpl.java:192)
> at
>org.apache.openjpa.persistence.EntityManagerFactoryImpl.createE
>ntityManager(EntityManagerFactoryImpl.java:145)
> at
>org.apache.openjpa.persistence.EntityManagerFactoryImpl.createE
>ntityManager(EntityManagerFactoryImpl.java:56)
> at Test.main(Test.java:10)
>Caused by: java.lang.NullPointerException
> at
>org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedSt
>ate(ManagedClassSubclasser.java:275)
> at
>org.apache.openjpa.enhance.ManagedClassSubclasser.configureMeta
>Data(ManagedClassSubclasser.java:213)
> at
>org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenha
>ncedClasses(ManagedClassSubclasser.java:137)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
>rImpl.java:39)
> at
>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
>dAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
>org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentT
>ypes(AbstractBrokerFactory.java:287)
> ... 6 more
>
>--
>This message is automatically generated by JIRA.
>-
>You can reply to this email to add a comment to the issue online.
>
>
Notice: This email message, together with any attachments, may contain information of BEA Systems, Inc., its subsidiaries and affiliated entities, that may be confidential, proprietary, copyrighted and/or legally privileged, and is intended solely for the use of the individual or entity named in this message. If you are not the intended recipient, and have received this message in error, please immediately return this by email and then delete it.
[jira] Commented: (OPENJPA-348) Composite PK with association
Posted by "Eddie Man (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12525357 ]
Eddie Man commented on OPENJPA-348:
-----------------------------------
Problem solved after I run the enhancer.
It is mean the composite pk with association will not work without enhancement?
> Composite PK with association
> -----------------------------
>
> Key: OPENJPA-348
> URL: https://issues.apache.org/jira/browse/OPENJPA-348
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.0.0
> Reporter: Eddie Man
>
> I got an exception while using a association within a composite PK
> A.java
> ========
> @Entity
> public class A {
> @Id
> public int id;
>
> @OneToMany(mappedBy="a", cascade=CascadeType.ALL)
> public HashSet<B> bs = new HashSet<B>();
> }
> B.java
> ========
> @Entity
> @IdClass(BPK.class)
> public class B {
>
> @Id
> public int id;
>
> @Id
> @ManyToOne(cascade=CascadeType.ALL)
> @JoinColumns({@JoinColumn(name="aid")})
> public A a;
>
> @Basic
> public String name;
> }
> BPK.class
> ============
> public class BPK {
>
> public int id;
>
> public int a;
> @Override
> public boolean equals(Object aObj) {
> return super.equals(aObj);
> }
>
> @Override
> public int hashCode() {
> return super.hashCode();
> }
> }
> Here is my code for inserting data to db:
> EntityManager manager = Persistence.createEntityManagerFactory("openjpa").createEntityManager();
> EntityTransaction transaction = manager.getTransaction();
> transaction.begin();
>
> A a = new A();
> a.id = 1;
>
> B b = new B();
> b.id = 2;
> b.a = a;
>
> a.bs.add(b);
>
> manager.persist(a);
> transaction.commit();
> manager.close();
> Exception :
> ==============
> Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> at Test.main(Test.java:10)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
> ... 6 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (OPENJPA-348) Composite PK with association
Posted by "Patrick Linskey (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12524769 ]
Patrick Linskey commented on OPENJPA-348:
-----------------------------------------
Can you post the log trace that you get if you set the Enhance channel to TRACE?
<property name="openjpa.Log" value="Enhance=TRACE"/>
> Composite PK with association
> -----------------------------
>
> Key: OPENJPA-348
> URL: https://issues.apache.org/jira/browse/OPENJPA-348
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.0.0
> Reporter: Eddie Man
>
> I got an exception while using a association within a composite PK
> A.java
> ========
> @Entity
> public class A {
> @Id
> public int id;
>
> @OneToMany(mappedBy="a", cascade=CascadeType.ALL)
> public HashSet<B> bs = new HashSet<B>();
> }
> B.java
> ========
> @Entity
> @IdClass(BPK.class)
> public class B {
>
> @Id
> public int id;
>
> @Id
> @ManyToOne(cascade=CascadeType.ALL)
> @JoinColumns({@JoinColumn(name="aid")})
> public A a;
>
> @Basic
> public String name;
> }
> BPK.class
> ============
> public class BPK {
>
> public int id;
>
> public int a;
> @Override
> public boolean equals(Object aObj) {
> return super.equals(aObj);
> }
>
> @Override
> public int hashCode() {
> return super.hashCode();
> }
> }
> Here is my code for inserting data to db:
> EntityManager manager = Persistence.createEntityManagerFactory("openjpa").createEntityManager();
> EntityTransaction transaction = manager.getTransaction();
> transaction.begin();
>
> A a = new A();
> a.id = 1;
>
> B b = new B();
> b.id = 2;
> b.a = a;
>
> a.bs.add(b);
>
> manager.persist(a);
> transaction.commit();
> manager.close();
> Exception :
> ==============
> Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> at Test.main(Test.java:10)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
> ... 6 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (OPENJPA-348) Composite PK with association
Posted by "Eddie Man (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12524971 ]
Eddie Man commented on OPENJPA-348:
-----------------------------------
Actually, I haven't apply any enhancement on the class.
Here is the output after added the log property:
35 openjpa INFO [main] openjpa.Runtime - Starting OpenJPA 1.0.0
159 openjpa INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary".
340 openjpa INFO [main] openjpa.Enhance - Creating subclass and redefining methods for "[class A, class B]". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer.
673 openjpa TRACE [main] openjpa.Enhance - Enhancing type "class A".
Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
at Test.main(Test.java:9)
Caused by: java.lang.NullPointerException
at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
... 6 more
> Composite PK with association
> -----------------------------
>
> Key: OPENJPA-348
> URL: https://issues.apache.org/jira/browse/OPENJPA-348
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.0.0
> Reporter: Eddie Man
>
> I got an exception while using a association within a composite PK
> A.java
> ========
> @Entity
> public class A {
> @Id
> public int id;
>
> @OneToMany(mappedBy="a", cascade=CascadeType.ALL)
> public HashSet<B> bs = new HashSet<B>();
> }
> B.java
> ========
> @Entity
> @IdClass(BPK.class)
> public class B {
>
> @Id
> public int id;
>
> @Id
> @ManyToOne(cascade=CascadeType.ALL)
> @JoinColumns({@JoinColumn(name="aid")})
> public A a;
>
> @Basic
> public String name;
> }
> BPK.class
> ============
> public class BPK {
>
> public int id;
>
> public int a;
> @Override
> public boolean equals(Object aObj) {
> return super.equals(aObj);
> }
>
> @Override
> public int hashCode() {
> return super.hashCode();
> }
> }
> Here is my code for inserting data to db:
> EntityManager manager = Persistence.createEntityManagerFactory("openjpa").createEntityManager();
> EntityTransaction transaction = manager.getTransaction();
> transaction.begin();
>
> A a = new A();
> a.id = 1;
>
> B b = new B();
> b.id = 2;
> b.a = a;
>
> a.bs.add(b);
>
> manager.persist(a);
> transaction.commit();
> manager.close();
> Exception :
> ==============
> Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> at Test.main(Test.java:10)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
> ... 6 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (OPENJPA-348) Composite PK with association
Posted by "Eddie Man (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12525024 ]
Eddie Man commented on OPENJPA-348:
-----------------------------------
I found that the problem is only occur is the persistence object is default package.
After I move the class to "sss" package, then I get the following exception:
[code]
35 openjpa INFO [main] openjpa.Runtime - Starting OpenJPA 1.0.0
331 openjpa INFO [main] openjpa.Enhance - Creating subclass and redefining methods for "[class sss.B, class sss.A]". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer.
662 openjpa TRACE [main] openjpa.Enhance - Enhancing type "class sss.B".
732 openjpa TRACE [main] openjpa.Enhance - Enhancing type "class sss.A".
Exception in thread "main" <openjpa-1.0.0-r420667:568756 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: sss.A cannot be cast to java.lang.Number
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2402)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2298)
at org.apache.openjpa.kernel.BrokerImpl.persistAll(BrokerImpl.java:2244)
at org.apache.openjpa.kernel.SingleFieldManager.persist(SingleFieldManager.java:267)
at org.apache.openjpa.kernel.StateManagerImpl.cascadePersist(StateManagerImpl.java:2840)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2397)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2216)
at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1005)
at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:541)
at Test.main(Test.java:21)
Caused by: java.lang.ClassCastException: sss.A cannot be cast to java.lang.Number
at org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchIntField(ApplicationIds.java:537)
at org.apache.openjpa.enhance.sss$B$pcsubclass.pcCopyKeyFieldsToObjectId(Unknown Source)
at org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:160)
at org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:185)
at org.apache.openjpa.enhance.ReflectingPersistenceCapable.pcNewObjectIdInstance(ReflectingPersistenceCapable.java:257)
at org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:384)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2370)
... 9 more
[/code]
> Composite PK with association
> -----------------------------
>
> Key: OPENJPA-348
> URL: https://issues.apache.org/jira/browse/OPENJPA-348
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 1.0.0
> Reporter: Eddie Man
>
> I got an exception while using a association within a composite PK
> A.java
> ========
> @Entity
> public class A {
> @Id
> public int id;
>
> @OneToMany(mappedBy="a", cascade=CascadeType.ALL)
> public HashSet<B> bs = new HashSet<B>();
> }
> B.java
> ========
> @Entity
> @IdClass(BPK.class)
> public class B {
>
> @Id
> public int id;
>
> @Id
> @ManyToOne(cascade=CascadeType.ALL)
> @JoinColumns({@JoinColumn(name="aid")})
> public A a;
>
> @Basic
> public String name;
> }
> BPK.class
> ============
> public class BPK {
>
> public int id;
>
> public int a;
> @Override
> public boolean equals(Object aObj) {
> return super.equals(aObj);
> }
>
> @Override
> public int hashCode() {
> return super.hashCode();
> }
> }
> Here is my code for inserting data to db:
> EntityManager manager = Persistence.createEntityManagerFactory("openjpa").createEntityManager();
> EntityTransaction transaction = manager.getTransaction();
> transaction.begin();
>
> A a = new A();
> a.id = 1;
>
> B b = new B();
> b.id = 2;
> b.a = a;
>
> a.bs.add(b);
>
> manager.persist(a);
> transaction.commit();
> manager.close();
> Exception :
> ==============
> Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:303)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:197)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> at Test.main(Test.java:10)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.enhance.ManagedClassSubclasser.setDetachedState(ManagedClassSubclasser.java:275)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.configureMetaData(ManagedClassSubclasser.java:213)
> at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:137)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:287)
> ... 6 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.