openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: ID class: no public string or class + string constructor?
Date Tue, 11 Sep 2007 17:20:45 GMT
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: 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

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!


Mime
View raw message