openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex, Huang" <primemo...@gmail.com>
Subject Re: Can't obtain Primary Key value by JPQL
Date Wed, 03 Nov 2010 16:55:26 GMT
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" <curtisr7@gmail.com>
To: <users@openjpa.apache.org>
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 <primemoxie@gmail.com> 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
>>
>>
>>
> 



Mime
View raw message