My guess. Since you are creating table and inserting outside of openjpa there might be a data type mismatch between the two id's definition in .java file and in database. For ex, in java file taking long as data type of id means bigint in mysql. So, I am "guessing" that there is difference of data types between the two definitions.
regards On Wed, Sep 9, 2009 at 12:52 PM, B.L. Zeebub <roger.var...@googlemail.com>wrote: > > > > Here's another idea... When did these entities get persisted to the > database? And, are they still part of the persistence context that is > being > used for the query? > > > Thanks to everyone for their responses. Removing the quotes from the int > values in the SQL statement changed things a bit, but I'm still not there. > The entity Platform was created directly with the MySQL Query Browser in a > 5.1.37 database using the DDL listed; > > CREATE TABLE ids2.Platform ( > id INT NOT NULL AUTO_INCREMENT > , PlatformName VARCHAR(32) > , PRIMARY KEY (id) > ) ENGINE = InnoDB; > ALTER TABLE ids2.Platform MODIFY COLUMN PlatformName VARCHAR(32) > COMMENT 'Platform Description'; > > The table was then filled manually using INSERT INTO sql statements so the > table and it's contents were created externally to any JPA implementations. > My test cases now read > > @Test > public void listPlatforms() { > > String jpql = "select c from Platform c"; > List<Platform> entities = (List) > em.createQuery(jpql).getResultList(); > assertEquals("List size:" , 9 , entities.size()); > assertEquals("Id", 8, entities.get(7).getId()); > } > > @Test > public void listPlatformsNative() { > String jpql = "select * from Platform"; > List<Platform> entities = (List) > em.createNativeQuery(jpql,Platform.class).getResultList(); > assertEquals("List size:" , 9 , entities.size()); > assertEquals("Id", 8, entities.get(7).getId()); > > } > @Test > public void getPlatformById() { > Platform platform = (Platform) em.find(Platform.class, 8); > assertNotNull(platform); > assertEquals("PlatformName", "record8", > platform.getPlatformName()); > assertEquals("Id",8,platform.getId()); > } > > @Test > public void getPlatformByQueryById() { > String jpql = "Select c from Platform c where c.id=8"; > Platform platform = (Platform) > em.createQuery(jpql).getSingleResult(); > assertNotNull(platform); > assertEquals("PlatformName", "record8", > platform.getPlatformName()); > assertEquals("Id",8,platform.getId()); > } > > @Test > public void getPlatformByNativeQueryById() { > String jpql = "Select * from Platform where id=8"; > Platform platform = (Platform) > em.createNativeQuery(jpql,Platform.class).getSingleResult(); > assertNotNull(platform); > assertEquals("PlatformName", "record8", > platform.getPlatformName()); > assertEquals("Id",8,platform.getId()); > } > > All the tests are failing on the id assertion, returning 0 in all cases. > I've set the openjpa.Log property to SQL=TRACE and the results from the > tests are below. They don't seem terribly informative, is there a > different/alternative setting I should be using? > > 78 ids2 INFO [main] openjpa.Runtime - Starting OpenJPA 1.2.1 > 250 ids2 INFO [main] openjpa.jdbc.JDBC - Using dictionary class > "org.apache.openjpa.jdbc.sql.MySQLDictionary". > 11422 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 18414151> > executing prepstmnt 32512553 SELECT t0.id, t0.PlatformName FROM Platform > t0 > 11422 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 18414151> > [0 > ms] spent > 16547 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 29594051> > executing prepstmnt 27660658 select * from Platform > 16563 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 29594051> > [16 ms] spent > 21594 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 22538826> > executing prepstmnt 17427094 SELECT t0.PlatformName FROM Platform t0 WHERE > t0.id = ? [params=(int) 8] > 21594 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 22538826> > [0 > ms] spent > 26641 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 27140443> > executing prepstmnt 1668655 SELECT t0.id, t0.PlatformName FROM Platform t0 > WHERE (t0.id = ?) [params=(long) 8] > 26641 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 27140443> > [0 > ms] spent > 31672 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 12273995> > executing prepstmnt 28318458 Select * from Platform where id=8 > 31672 ids2 TRACE [main] openjpa.jdbc.SQL - <t 12590745, conn 12273995> > [0 > ms] spent > > > > Regards > > -- > View this message in context: > http://n2.nabble.com/NEWBIE-OpenJPA-Cannot-get-id-field-returned-tp3601995p3608883.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. > -- Ashish Paliwal Mobile : 9305128367 IIT Kanpur India