Hi Rick, Log: ===================START================================================== 188 JPATEST INFO [main] openjpa.Runtime - Starting OpenJPA 2.0.1 3094 JPATEST TRACE [main] openjpa.jdbc.SQL - <t 30466761, conn 14220570> executing prepstmnt 23932998 SELECT t0.uid, t0.age, t0.name FROM t_user t0 3094 JPATEST TRACE [main] openjpa.jdbc.SQL - <t 30466761, conn 14220570> [0 ms] spent ===================END====================================================
Thanks in advance. Alex,Huang ----- Original Message ----- From: "Rick Curtis" <[email protected]> To: <[email protected]> Sent: Wednesday, November 03, 2010 11:21 PM Subject: Re: Can't obtain Primary Key value by JPQL > Can you post the SQL trace from when you execute your query? > > Thanks, > Rick > > On Wed, Nov 3, 2010 at 3:51 AM, Alex, Huang <[email protected]> wrote: > >> Hi everybody, >> >> I am using openJPA2.0.1 + Mysql5.1. >> >> Table definition like below, >> ===============DML START======================= >> CREATE TABLE t_user ( >> uid int(10) unsigned NOT NULL AUTO_INCREMENT, >> name varchar(255) DEFAULT NULL, >> age int(11) NOT NULL, >> PRIMARY KEY (uid) >> ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; >> ===============DML END========================= >> >> entity, >> ==========Entity START========================= >> @Entity >> @Table(name="t_user") >> public class TUser implements Serializable { >> private static final long serialVersionUID = 1L; >> >> @Id >> @GeneratedValue(strategy=GenerationType.IDENTITY) >> @Column(insertable=false) >> private int uid; >> >> private int age; >> >> private String name; >> ......getter and setter..... >> ==========Entity END=========================== >> >> ==========persistence.xml START=========================== >> ................ >> <class>entity.TUser</class> >> <properties> >> <property name="openjpa.jdbc.DBDictionary" value="mysql"/> >> <property name="javax.persistence.jdbc.driver" >> value="com.mysql.jdbc.Driver"/> >> <property name="javax.persistence.jdbc.url" >> value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8"/> >> <property name="javax.persistence.jdbc.user" value="root"/> >> <property name="javax.persistence.jdbc.password" value="xxxxxx"/> >> <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, >> Tool=INFO, SQL=TRACE"/> >> </properties> >> >> ==========persistence.xml END============================= >> >> >> I run a JPQL like below, >> >> Query query = em.createQuery("SELECT user FROM TUSER user"); >> >> For the result, I can get each field's value except primary key field. In >> this case, each entity's uid field is zero. >> >> I tried to trace the source code and I found the following code in >> org.apache.openjpa.jdbc.kernel.JDBCStoreManager from LINE 1085. >> >> // load unloaded fields >> FieldMapping[] fms = mapping.getDefinedFieldMappings(); >> Object eres, processed; >> for (int i = 0; i < fms.length; i++) { >> if (fms[i].isPrimaryKey() || >> sm.getLoaded().get(fms[i].getIndex())) >> continue; >> >> It seemed that if the a field is primary key so no value would be passed >> to >> it. Would someone tell me why? Did I miss any setting? >> >> Thanks and best regards, >> Alex, Huang >> >> >> >
