openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gene Wu <gene...@hotmail.com>
Subject RE: ID class: no public string or class + string constructor?
Date Tue, 11 Sep 2007 09:12:22 GMT
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.


Thanks,

Gene.
> Date: Tue, 11 Sep 2007 13:25:03 +0530
> From: Sahoo@Sun.COM
> Subject: Re: ID class: no public string or class + string constructor?
> To: dev@openjpa.apache.org
> 
> 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,
> > Gene
> >
> >
> >   
> >> Date: Tue, 11 Sep 2007 12:35:27 +0530
> >> From: Sahoo@Sun.COM
> >> Subject: Re: ID class: no public string or class + string constructor?
> >> To: dev@openjpa.apache.org
> >>
> >> Is PeoplesoftSegmentId an *inner* (i.e. non-static nested) class? Make 
> >> it 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: gene_wu@hotmail.com
> >>>> To: dev@openjpa.apache.org
> >>>> 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 a
> >>>> public 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 out
 
> >>>>> which 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 @Id  
> >>>>>> annotation 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 requirements
 
> >>>>>>> of an ID class as defined in the spec.
> >>>>>>>
> >>>>>>> my first guess is that it wants me to add an constructor
that  
> >>>>>>> takes 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
> >>>>>> clr@apache.org http://db.apache.org/jdo
> >>>>>>
> >>>>>>
> >>>>>>         
> >>>>>>             
> >>>>> Craig Russell
> >>>>> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
> >>>>> 408 276-5638 mailto:Craig.Russell@sun.com
> >>>>> 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
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message