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

能否提供堆栈跟踪?