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: Exception when using java.sql.Date as an id
Date Wed, 07 Feb 2007 22:12:38 GMT

On Feb 7, 2007, at 1:55 PM, Patrick Linskey wrote:

>> It's coming from the generated bytecode which expects there
>> to be a getId
>> method that returns the same type of the Id, however
>> java.sql.Date is using
>> the same ID class as java.util.Date. Do we need a separate class for
>> java.sql.Date?
>
> It looks like we either need a separate type for java.sql.Date (and
> presumably java.sql.Timestamp), or we need to change the logic to  
> accept
> a getId() method that returns a type that is assignable from the id
> field's type.

It's probably cleaner if we have separate classes for the different  
types. That is, have the getId method in the new  
org.apache.openjpa.util.SQLDateId return the proper type  
(java.sql.Date). After all, java.sql.{Date, Time, Timestamp} are not  
really the same as java.util.Date.

Craig
>
> -Patrick
>
> -- 
> Patrick Linskey
> BEA Systems, Inc.
>
> ______________________________________________________________________ 
> _
> 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.
>
>> -----Original Message-----
>> From: Michael Dick [mailto:michael.d.dick@gmail.com]
>> Sent: Wednesday, February 07, 2007 12:57 PM
>> To: open-jpa-dev@incubator.apache.org
>> Subject: Exception when using java.sql.Date as an id
>>
>> Hi,
>>
>> I'm getting the following exception when I try to fetch an
>> entity with a
>> java.sql.Date as the id :
>>
>> java.lang.NoSuchMethodError: org.apache.openjpa.util.DateId.getId
>> ()Ljava/sql/Date;
>>     at mikedd.entities.SqlDatePK.pcCopyKeyFieldsFromObjectId
>> (SqlDatePK.java
>> )
>>     at mikedd.entities.SqlDatePK.pcNewInstance(SqlDatePK.java)
>>     at
>> org.apache.openjpa.enhance.PCRegistry.newInstance(PCRegistry.java
>> :118)
>>     at org.apache.openjpa.kernel.StateManagerImpl.initialize (
>> StateManagerImpl.java:247)
>>     at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(
>> JDBCStoreManager.java:327)
>>     at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(
>> JDBCStoreManager.java:252)
>>     at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(
>> DelegatingStoreManager.java:108)
>>     at org.apache.openjpa.kernel.ROPStoreManager.initialize(
>> ROPStoreManager.java:54)
>>     at org.apache.openjpa.kernel.BrokerImpl.initialize
>> (BrokerImpl.java:868)
>>     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:826)
>>     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:743)
>>     at org.apache.openjpa.kernel.DelegatingBroker.find (
>> DelegatingBroker.java:169)
>>     at org.apache.openjpa.persistence.EntityManagerImpl.find(
>> EntityManagerImpl.java:346)
>>     at
>> mikedd.tests.TestSqlDateId.testFindAfterClear(TestSqlDateId.java:25)
>>     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:585)
>>     at junit.framework.TestCase.runTest(TestCase.java:154)
>>     . . .
>>
>> It's coming from the generated bytecode which expects there
>> to be a getId
>> method that returns the same type of the Id, however
>> java.sql.Date is using
>> the same ID class as java.util.Date. Do we need a separate class for
>> java.sql.Date?
>>
>> Here's the entity and testcase that I'm running (in case I
>> missed something
>> along the way)
>>
>> Entity :
>> import java.sql.Date;
>>
>> import javax.persistence.Entity;
>> import javax.persistence.Id;
>>
>> @Entity
>> public class SqlDatePK {
>>
>>     @Id
>>     private Date id;
>>     private String name;
>>
>>     . . .
>> }
>>
>> Testcase :
>> public void testFindAfterClear() {
>>         SqlDatePK sql;
>>
>>         EntityManager em = _emf.createEntityManager();
>>
>>         long ms = 101010;  // arbitrary date.
>>         java.sql.Date date = new java.sql.Date(ms);
>>
>>         em.getTransaction().begin();
>>
>>         sql = new SqlDatePK();
>>         sql.setId(date);
>>         em.persist(sql);
>>
>>         em.getTransaction().commit();
>>
>>         em.clear();
>>         sql = null;
>>         sql = em.find(SqlDatePK.class, date);
>>
>>      . . .
>> }
>>
>> Thanks in advance,
>> -- 
>> -Michael Dick
>>

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