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