1

Hibernate3.3.1およびHibernateAnnotations3.4を使用すると、データベースはDB2 / 400 V6R1であり、WebSphere7.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の一部である他のエンティティがありますが、この問題はありません。

4

2 に答える 2

2

ある種の引用を試すことができます:

例えば:

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

また

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

もう 1 つのオプションは、DB2 のソース コードHibernate 方言を掘り下げて、役立つものが含まれているかどうかを確認することです。

もちろん、可能であれば列名からハッシュを削除するのが最も簡単な方法です。

于 2010-04-22T15:11:35.353 に答える
0

問題は列名のハッシュにあると思われます。休止状態フォーラムでの同様の質問は、バックティックがここで役立つ可能性があることを示唆しています。

于 2010-04-22T15:08:51.977 に答える