多くの場所を調べたところ、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 はこれらの注釈属性を完全に無視します。