使用Hibernate 3.3.1和Hibernate Annotations 3.4,数据库是DB2 / 400 V6R1,在WebSphere 7.0.0.9上运行

我有以下课程

@Entity
public class Ciinvhd implements Serializable {


    @Id
    private String ihinse;

    @Id
    @Column(name="IHINV#")
    private BigDecimal ihinv;

 ....

}


由于我无法弄清楚的原因,Hibernate忽略了指定的列名,并使用“ ihinv”来生成SQL:

select
        ciinvhd0_.ihinse as ihinse13_,
        ciinvhd0_.ihinv as ihinv13_,
...


当然哪个会给我以下错误:

Column IHINV not in table CIINVHD


编辑:我将休眠的日志级别切换为DEBUG,我看到它不处理该字段的列注释。尝试了一些随机的事情,但这是行不通的。

以前有人遇到过这个问题吗?我还有其他的实体,它们在数据库字段名称中使用#的方式非常相似,并且它们是PK的一部分,我对它们没有这个问题。

最佳答案

您可以尝试某种报价:

例如:

@Column(name="`IHINV#`")


要么

@Column(name="'IHINV#'")


另一个选择是深入研究源代码Hibernate dialect for DB2,看看它是否包含有用的内容。

当然,最简单的方法是在可能的情况下从列名中删除哈希。

10-06 14:31