Hibernate 无法在带注释的 id 上查找名称
Hibernate fails to lookup name on annotated id
我正在构建一个 Java EE 应用程序,它使用休眠来映射数据库实体。服务器是 JBoss 5.2。在我的应用程序中,我创建了实体 X,它有两个整数作为主键。
@Entity
@Table(name = "X")
@NamedQueries({
@NamedQuery(name = "findByMyId", query = "select o from X o where o.id = :id")
})
@IdClass(XPK.class)
public class X implements Serializable {
private int id, version;
@Id
@Column(name = "VERSION_NUMBER", unique = false, nullable = false)
public int getVersion() {
return version;
}
public void setVersion(int v) {
version = v;
}
@Id
@Column(name = "MY_ID", unique = false, nullable = false)
public int getId() {
return id;
}
public void setId(int i) {
id = i;
}
}
私钥class 非常简单。它包含与实体中具有相同名称、getter 和 setter 的 id:s。
public class XPK {
private int id, version;
public XPK() {}
public XPK(int i, int v) {
id = i;
version = v;
}
public int getVersion() {
return version;
}
public void setVersion(int v) {
version = v;
}
public int getId() {
return id;
}
public void setId(int i) {
id = i;
}
}
持久性单元如下所示:
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
<property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
<property name="hibernate.cache.region.jbc2.cfg.query" value="local-query"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.session_factory_name" value="BaseModelSessionFactory"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
我希望 id 列的名称不同于 id 和 version(即 MY_ID 和 VERSION_NUMBER),因为这是它们在数据库中的名称。当我启动 JBoss 时,它抱怨找不到 "ID": invalid identifier
的错误。怎么会这样,我觉得 @Column(name) 应该可以解决问题?
注意:未使用 spring。
首先XPK必须实现Serializable。
看看教程:
http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cmp30cfg001.htm
能否提供堆栈跟踪?
我正在构建一个 Java EE 应用程序,它使用休眠来映射数据库实体。服务器是 JBoss 5.2。在我的应用程序中,我创建了实体 X,它有两个整数作为主键。
@Entity
@Table(name = "X")
@NamedQueries({
@NamedQuery(name = "findByMyId", query = "select o from X o where o.id = :id")
})
@IdClass(XPK.class)
public class X implements Serializable {
private int id, version;
@Id
@Column(name = "VERSION_NUMBER", unique = false, nullable = false)
public int getVersion() {
return version;
}
public void setVersion(int v) {
version = v;
}
@Id
@Column(name = "MY_ID", unique = false, nullable = false)
public int getId() {
return id;
}
public void setId(int i) {
id = i;
}
}
私钥class 非常简单。它包含与实体中具有相同名称、getter 和 setter 的 id:s。
public class XPK {
private int id, version;
public XPK() {}
public XPK(int i, int v) {
id = i;
version = v;
}
public int getVersion() {
return version;
}
public void setVersion(int v) {
version = v;
}
public int getId() {
return id;
}
public void setId(int i) {
id = i;
}
}
持久性单元如下所示:
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
<property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
<property name="hibernate.cache.region.jbc2.cfg.query" value="local-query"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.session_factory_name" value="BaseModelSessionFactory"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
我希望 id 列的名称不同于 id 和 version(即 MY_ID 和 VERSION_NUMBER),因为这是它们在数据库中的名称。当我启动 JBoss 时,它抱怨找不到 "ID": invalid identifier
的错误。怎么会这样,我觉得 @Column(name) 应该可以解决问题?
注意:未使用 spring。
首先XPK必须实现Serializable。
看看教程: http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cmp30cfg001.htm
能否提供堆栈跟踪?