1

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

编辑:我将休眠的日志级别切换为调试,我看到它不处理该字段的列注释。尝试了几个随机的东西它只是不起作用。

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

4

2 回答 2

2

您可以尝试某种引用:

例如:

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

或者

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

另一种选择是深入研究DB2 的 Hibernate dialect源代码,看看它是否包含任何有用的东西。

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

于 2010-04-22T15:11:35.353 回答
0

我怀疑问题是列名中的哈希。hibernate 论坛上的一个类似问题表明,反引号在这里很有用。

于 2010-04-22T15:08:51.977 回答