2016-10-17 11 views
0

Hibernateでは、セッションでsaveを呼び出す前に手動で@GeneratedValueプロパティの値を生成することをスキップする方法がありますか?自動生成されたidプロパティを手動で設定する

私はインポート/エクスポート機能を構築しており、以前に作成したエクスポートからIDを保持したいと考えています。

答えて

0

デフォルトでは、Hibernateは値がすでに設定されている場合はオーバーライドしないので、すべてが期待どおりに動作するはずです。 AUTOを使用していないことを確認してください。

もっと複雑なロジックが必要な場合は、@GenericGeneratorをご覧ください。 https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-identifier

+0

興味深い...何らかの理由でIDを生成しようとしています。他の何かが正しく動作していない可能性があります。私は掘り続けます。 –

+0

実際には、「あなたがAUTOを使用していないことを確認してください」という意味はどうですか?私はAUTOを使用しています... –

+0

明示的に "IDENTITY"に設定すると、動作します。なぜ、私は理解していません... –

0

@GeneratedValueidがどのあなたはこの注釈がnull/0で適用している場合、それは戦略だ適用されます。

これは、idフィールドを手動で割り当てた場合、@GeneratedValueアノテーションがUSELESSであることを意味します。

0

問題は、@GeneratedValueのデフォルト戦略(AUTO)を使用していたことです。私が明示的にIDENTITYを指定するように変更すると、それは機能します!

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

あなたがこの方法を使用する場合けれども... :-)

+0

特に、間違った方言が指定されていると、AUTOは薄暗くなります。 –

+0

実際、これはまだ動作しません。それは私のために新しいIDを生成します。 (私はこの場合HSQLDBを使用しています) –

+0

私が使用しているHibernateのバージョンと関係があるのだろうかと思います。私はかなり古いものです:4.3.8 –

0

は、言うことが重要である理由私は本当に理解していない:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

そして、あなたが持っていませんあなたがデータベースに設定したIDはあなたのIDセットを無視し、データベースは新しいIDを作成します。つまり、空のデータベースがあり、user.setId(100L)を設定して保存した場合、データベースでそれを見つけると、service.findById(100L)はオブジェクトを検出しません。

関連する問題