我正在使用hibernate构建一个Java EE应用程序来映射数据库实体。服务器是JBoss 5.2。在我的应用程序中,我创建了实体X,它有两个int作为主键。
@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;
}
}
私钥类很简单。它包含与实体中名称,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(名字)应该这样做?
注意:不使用弹簧。
答案 0 :(得分:0)
首先,XPK必须实现Serializable。
看一下教程: http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cmp30cfg001.htm
你能提供堆栈跟踪吗?