3

多くの場所を調べたところ、postgresql を使用した休止状態では、serial/bigserial テーブル列にマップされる IDENTITY 主キー ジェネレーターを使用できることがわかりました。次のエンティティがあるとします。

@Entity
class A {

    long id;

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    public long getId() { return id; }

}

正常に動作し、ddl は次のようになります。

create table A (id bigserial)

残念ながら、@ManyToOne を介して 'a' を参照しようとすると、bigserial でもある外部キー列が生成されます。

@Entity
class B {

    // id ommitted ...

    A a;

    @ManyToOne
    public A getA() {
      return a;
    }

}

次のような ddl を生成します。

create table B (..., a_id bigserial)

ほとんどの場合、これで問題なく動作します。しかし、論理的には完全に間違っています。a_id は bigserial の「データ型」とも関係ありません。

テーブル B の列 a_id に bigint を使用するように hibernate に指示する方法はありますか?

@JoinColumn または @Column アノテーションの columnDefinition で getter をオーバーライドしようとしましたが、うまくいきませんでした。Hibernate はこれらの注釈属性を完全に無視します。

4

0 に答える 0