Hibernate无法在带注释的id上查找名称

时间:2016-03-16 06:30:19

标签: java hibernate jpa jboss

我正在使用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(名字)应该这样做?

注意:不使用弹簧。

1 个答案:

答案 0 :(得分:0)

首先,XPK必须实现Serializable。

看一下教程: http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cmp30cfg001.htm

你能提供堆栈跟踪吗?