为什么Hibernates忽略@Column注释的name属性?

时间:2010-04-22 15:03:41

标签: java hibernate annotations websphere db2-400

使用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

编辑:我将hibernate的日志级别切换为DEBUG,我发现它不会处理该字段的列注释。尝试了几件随机的东西,它只是不起作用。

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

2 个答案:

答案 0 :(得分:2)

您可以尝试某种引用:

例如:

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

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

另一种选择是深入挖掘源代码Hibernate dialect for DB2并查看它是否包含任何有用的内容。

当然,最简单的方法是尽可能从列名中删除哈希值。

答案 1 :(得分:0)

我怀疑问题是列名中的哈希值。 similar question on the hibernate forums表示反引号在这里很有用。