> 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.

-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:[EMAIL PROTECTED] 
> 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
> 

Reply via email to