【问题标题】:Why Hibernates ignores the name attribute of the @Column annotation?为什么 Hibernates 会忽略 @Column 注解的 name 属性?
【发布时间】:2011-02-11 03:03:09
【问题描述】:

使用 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 的一部分,我对它们没有这个问题。

【问题讨论】:

  • 在列名中包含哈希是否合法?这是什么数据库?
  • @cletus - 问题说数据库是 DB2/400。
  • @cletus - DB2/400,是的,它是合法的。

标签: java hibernate annotations websphere db2-400


【解决方案1】:

您可以尝试某种引用:

例如:

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

或

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这解决了当您切换到不支持井号的方言时的问题。哈希符号在我的数据库中的许多其他表中使用,我从来没有遇到任何问题。真的是这张桌子给我带来了麻烦。我可能面临休眠中的错误。感谢您的帮助。
    • @svachon - 其他带有哈希的字段是否属于同一类型(即 BigDecimal)?也许您在 hibernate 中遇到了特定于其处理该类型的错误?
    • 是的,还有其他字段的散列类型为 BigDecimal。而且我确实有其他具有哈希和 BigDecimal 的工作实体。
    • @svachon - 也许检查以确保 @Column 导入实际上是相同的?也许其中一个来自不同的包裹?这似乎不太可能,但问题的其余部分正在排除更多可能的可能性。
    • 是的,导入是一样的。我想我将不得不使用不带井号的列名创建视图。
    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 2014-07-10
    • 2023-04-08
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2010-12-11
    相关资源
    最近更新 更多