atom feed19 messages in org.apache.openjpa.usersRe: Can't obtain Primary Key value by...
FromSent OnAttachments
Alex, HuangNov 3, 2010 1:50 am 
Rick CurtisNov 3, 2010 8:21 am 
Alex, HuangNov 3, 2010 9:55 am 
Rick CurtisNov 3, 2010 11:02 am 
Alex, HuangNov 3, 2010 11:06 am 
Rick CurtisNov 3, 2010 11:30 am 
Alex, HuangNov 3, 2010 11:39 am 
Rick CurtisNov 3, 2010 11:47 am 
Alex, HuangNov 3, 2010 1:18 pm 
Rick CurtisNov 3, 2010 2:28 pm 
Alex, HuangNov 3, 2010 6:32 pm 
Rick CurtisNov 4, 2010 10:20 am 
Alex, HuangNov 4, 2010 10:18 pm 
C N DaviesNov 4, 2010 11:45 pm 
Rick CurtisNov 5, 2010 11:43 am 
Alex, HuangNov 7, 2010 9:38 am 
Rick CurtisNov 8, 2010 6:16 am 
Alex, HuangNov 8, 2010 7:27 am 
Rick CurtisNov 8, 2010 1:05 pm 
Subject:Re: Can't obtain Primary Key value by JPQL
From:Alex, Huang (prim@gmail.com)
Date:Nov 3, 2010 11:06:51 am
List:org.apache.openjpa.users

OK. ========================================================= package entity;

import java.io.Serializable; import javax.persistence.*;

/** * The persistent class for the t_user database table. * */ @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;

public TUser() { }

public int getUid() { return this.uid; }

public void setUid(int uid) { this.uid = uid; }

public int getAge() { return this.age; }

public void setAge(int age) { this.age = age; }

public String getName() { return this.name; }

public void setName(String name) { this.name = name; }

----- Original Message ----- From: "Rick Curtis" <curt@gmail.com> To: <use@openjpa.apache.org> Sent: Thursday, November 04, 2010 2:03 AM Subject: Re: Can't obtain Primary Key value by JPQL

Can you also post your entire Entity?

On Wed, Nov 3, 2010 at 11:55 AM, Alex, Huang <prim@gmail.com> wrote:

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====================================================

----- Original Message ----- From: "Rick Curtis" <curt@gmail.com> To: <use@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?

On Wed, Nov 3, 2010 at 3:51 AM, Alex, Huang <prim@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