2010-04-22 103 views
1

使用Hibernate 3.3.1和Hibernate标注3.4,数据库是DB2/400 V6R1,运行在WebSphere 7.0.0.9为什么Hibernates会忽略@Column注释的名称属性?

我有下面的类

@Entity 
public class Ciinvhd implements Serializable { 


    @Id 
    private String ihinse; 

    @Id 
    @Column(name="IHINV#") 
    private BigDecimal ihinv; 

.... 

} 

至于原因,我想不通,休眠忽略指定的列名,而使用“ihinv”生成SQL:

select 
     ciinvhd0_.ihinse as ihinse13_, 
     ciinvhd0_.ihinv as ihinv13_, 
... 

这当然给了我以下错误:

Column IHINV not in table CIINVHD 

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

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

+1

在列名中使用散列是否合法?这是什么数据库? – cletus 2010-04-22 15:05:03

+0

@cletus - 问题是数据库是DB2/400。 – jsight 2010-04-22 15:09:22

+0

@cletus - DB2/400,是的,它是合法的。 – svachon 2010-04-22 15:24:55

回答

0

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

+0

当你切换到一个不支持散列符号的方言时,这个问题就出现了。哈希符号在我的数据库中的许多其他表中使用,我从来没有任何问题。这张桌子真的有麻烦了。我可能会面临一个冬眠的bug。感谢您的帮助。 – svachon 2010-04-23 12:36:44

+0

@svachon - 其他字段是否具有相同类型的散列(即BigDecimal)?也许你在hibernate中遇到了一个特定于它的处理类型的bug? – jsight 2010-04-23 15:35:11

+0

是的,还有其他类型的哈希类型为BigDecimal。而且我还有其他有散列和BigDecimal的工作实体。 – svachon 2010-04-26 18:07:16

2

你可以尝试某种引用的:

例如:

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

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

另一种选择是在挖源代码Hibernate dialect for DB2,看看它是否包含任何有用的。

当然,最简单的方法是在可能的情况下从列名移除哈希。

+0

感谢您的建议,但这不适合我。 – svachon 2010-04-22 18:04:40