Hi Gene, On Sep 11, 2007, at 2:12 AM, Gene Wu wrote:
absolutely you are right. the error comes from my 2nd testing. Sorry for misleading.Finally, I found the problem from my colleague's code. Maybe I can commit a defect to JIRA.The root cause of that issue is:PeoplesoftSegmentEntity entity = _em.find (PeoplesoftSegmentEntity.class, 12345);As you know PeoplesoftSegmentEntity has composite key defined in PeoplesoftSegmentEntityId class. So when user try to find the entity, he must use the instance of Id class. But in this case, he use int value 12345. It will cause the problem. But I think OpenJPA didn't matched key type when the user passed in the value.
Yes, please file a JIRA for this issue. The find method should throw an exception with a detail message saying that the key value doesn't match the id type.
Thanks, Craig
Thanks, Gene.Date: Tue, 11 Sep 2007 13:25:03 +0530 From: [EMAIL PROTECTED]Subject: Re: ID class: no public string or class + string constructor?To: [email protected] Then you probably have a classpath/packaging issue. The OpenJPA error contains a nested class name (see $ in the name):com.werner.accounting.model.PeoplesoftSegmentEntity $PeoplesoftSegmentId.Thanks, Sahoo Gene Wu wrote:no, it's a top level class. I also tried static nested class. Still the same issue I met. Thanks, GeneDate: Tue, 11 Sep 2007 12:35:27 +0530 From: [EMAIL PROTECTED]Subject: Re: ID class: no public string or class + string constructor?To: [email protected]Is PeoplesoftSegmentId an *inner* (i.e. non-static nested) class? Makeit a static nested class or a top level class and try. Thanks, Sahoo Gene Wu wrote:Here is the error stack:[WLServer TmsServer] javax.ejb.EJBException: nested exception is: <0|false|0.9.7> org.apache.openjpa.persistence.PersistenceException: The id type "class com.werner.accounting.model.PeoplesoftSegmentEntity $PeoplesoftSegmentId" specfied by persistent type "class com.wer er.accounting.model.PeoplesoftSegmentEntity" does not have a public string or class + string constructor. [WLServer TmsServer] <0|false|0.9.7> org.apache.openjpa.persistence.PersistenceException: The id type "class com.werner.accounting.mod l.PeoplesoftSegmentEntity$PeoplesoftSegmentId" specfied by persistent type "class com.werner.accounting.model.PeoplesoftSegmentEntity"does not have a public string or class + string constructor.[WLServer TmsServer] at org.apache.openjpa.kernel.BrokerImpl.newObjectId (BrokerImpl.java:1120) [WLServer TmsServer] at org.apache.openjpa.kernel.DelegatingBroker.newObjectId (DelegatingBroker.java:254) [WLServer TmsServer] at org.apache.openjpa.persistence.EntityManagerImpl.find (EntityManagerImpl.java:345) [WLServer TmsServer] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)BTW, I didn't find any IdClass test cases in OpenJPA test suit. Thanks Gene.Date: Mon, 10 Sep 2007 22:15:36 -0700 From: [EMAIL PROTECTED] To: [email protected]Subject: Re: ID class: no public string or class + string constructor?I got the same exception. nested exception is: <0|false|0.9.7>org.apache.openjpa.persistence.PersistenceException: The id type "class com.werner.accounting.model.PeoplesoftSegmentId" specfied by persistent type "class com.werner.accounting.model.PeoplesoftSegmentEntity" does not have apublic string or class + string constructor ID Class is: public class PeoplesoftSegmentId implements Serializable { public String _businessUnit; public String _vasTourId; /** Creates a new instance of PeoplesoftSegmentId */ public PeoplesoftSegmentId() { } @Override public int hashCode() { int hash = 0;hash += (this._businessUnit != null ? this._businessUnit.hashCode() : 0); hash += (this._vasTourId != null ? this._vasTourId.hashCode () : 0);return hash; } @Override public boolean equals(Object object) { if(!(object instanceof PeoplesoftSegmentId)) { return false; } PeoplesoftSegmentId other = (PeoplesoftSegmentId)object; if(this._businessUnit != other._businessUnit && (this._businessUnit == null || !this._businessUnit.equals(other._businessUnit))) return false; if(this._vasTourId != other._vasTourId && (this._vasTourId == null || !this._vasTourId.equals(other._vasTourId))) return false; return true; } public String toString() { return _businessUnit + ":" + _vasTourId; } } Entity Class is: @Entity @IdClass(PeoplesoftSegmentId.class) public class PeoplesoftSegmentEntity implements Serializable { @Id private String _businessUnit; @Id private String _vasTourId; ... Thanks Gene. Craig L Russell wrote:Are you using @Id or @IdClass or @EmbeddedId annotations?I'm looking at 2.1.4, 9.1.14, and 9.1.15 and trying to figure outwhich case you're having trouble with. Craig On Mar 26, 2007, at 5:37 PM, Craig L Russell wrote:Hi Jeff,It would be useful if you could include a code fragment and the @Idannotation for your class to diagnose this. Thanks, Craig On Mar 26, 2007, at 4:35 PM, jeff wrote:getting this error: The id type "class com.sun.portal.pom.FooId" specfied by persistent type "class com.sun.portal.pom.Foo" does not have a public string or class + string constructor.this error doesn't seem to correspond to any of the requirementsof an ID class as defined in the spec. my first guess is that it wants me to add an constructor thattakes the result of toString() and constructs the ID class based on that, but adding a constructor that takes a string arg didn't change the error. i don't understand what it would want for the "class + string" constructor, so i was not sure what to try there.can someone help interpret this error? thanks! --------------------------------- Never miss an email again!Yahoo! Toolbar alerts you the instant new Mail arrives. Check it out.Craig Russell DB PMC, OpenJPA PPMC [EMAIL PROTECTED] http://db.apache.org/jdoCraig RussellArchitect, Sun Java Enterprise System http://java.sun.com/ products/jdo408 276-5638 mailto:[EMAIL PROTECTED] P.S. A good JDO? O, Gasp!--View this message in context: http://www.nabble.com/ID-class% 3A-no-public-string-or-class-%2B-string-constructor-- tf3470194.html#a12608201 Sent from the OpenJPA Developers mailing list archive at Nabble.com._________________________________________________________________ Capture your memories in an online journal! http://www.reallivemoms.com?ocid=TXT_TAGHM&loc=us_________________________________________________________________ Capture your memories in an online journal! http://www.reallivemoms.com?ocid=TXT_TAGHM&loc=us_________________________________________________________________More photos; more messages; more whatever – Get MORE with Windows Live™ Hotmail®. NOW with 5GB storage. http://imagine-windowslive.com/hotmail/?locale=en- us&ocid=TXT_TAGHM_migration_HM_mini_5G_0907
Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:[EMAIL PROTECTED] P.S. A good JDO? O, Gasp!
smime.p7s
Description: S/MIME cryptographic signature
