使用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的一部分,我没有这个问题。
答案 0 :(得分:2)
您可以尝试某种引用:
例如:
@Column(name="`IHINV#`")
或
@Column(name="'IHINV#'")
另一种选择是深入挖掘源代码Hibernate dialect for DB2并查看它是否包含任何有用的内容。
当然,最简单的方法是尽可能从列名中删除哈希值。
答案 1 :(得分:0)
我怀疑问题是列名中的哈希值。 similar question on the hibernate forums表示反引号在这里很有用。