Thanks, I'll open a JIRA report and take a crack at a solution.
On 2/7/07, Craig L Russell <[EMAIL PROTECTED] > wrote:
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: [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 >> 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!
-- -Michael Dick