使用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,看看它是否包含有用的内容。
当然,最简单的方法是在可能的情况下从列名中删除哈希。