1

Hibernate 3.3.0で( )のSELECT前にクエリを実行して値を生成したい。これは次のように機能します:INSERTpersist()

@Generated(GenerationTime.INSERT)
@GenerateSQL("SELECT RANDOM() * 2")
private int number;

私は見てきました@Generated()、それはsにとって良いことですTRIGGER。トリガーを導入したくありません。

私も見ました@Formula、それは読み取り専用です。

では、注釈の正しい組み合わせは何ですか?ありがとう。

4

1 に答える 1

1

INSERT の前に SELECT クエリを実行して Hibernate 3.3.0 に値を生成させたい

これはサポートされていないと思います。

代替案 #1: SELECT を「作成」ロジックの一部として、コード内で直接実行することもできます。

代替案 #2: Hibernate Interceptor を使用し、への参照を提供して、Interceptor からのSessionFactory実行中に SELECT を実行しonSaveます。

では、注釈の適切な組み合わせは何でしょうか?

デフォルトの設定は実際には十分にサポートされておらず ( HHH-4341を参照)、最も簡単な解決策は IMO が列レベルで DEFAULT 値を定義することです。それが私の代替案 #3です。以下に例を示します。

@Generated(GenerationTime.INSERT)
@Column(insertable=false, columnDefinition="INT DEFAULT 20") 
private int someNumber;

これがあなたにとってのオプションかどうかはわかりませんRANDOM()し、DEFAULT での使用がデータベースでサポートされるかどうかもわかりません (ちなみにどのようにしRANDOM() * 2て になるのintでしょうか?)。

于 2010-08-09T17:03:17.730 に答える