I've Tableは、トリガーとシーケンスを使用してPK列を設定します。
そのPkのHibernateマッピング戦略はassigned
..
これにより、次のsession.save(obj)
オブジェクトが返されます。id=0
正しく割り当てられたPK値を返すようにする方法。
session.getIdentifier()
動作しません!
assigned
意味: 誰も ID を生成しません。ID は永続化する前にエンティティに明示的に設定されます。
あなたがしたいことは不可能です。Hibernate は ID を知らずにエンティティを挿入する必要があり、その後データベースが ID を生成し、Hibernate はデータベースからエンティティをリロードして ID を知る必要がありました。しかし、ID を知らずにエンティティを再読み込みするにはどうすればよいでしょうか。
ネイティブ ジェネレーターは同じことを行いgetLastGeneratedId()
、データベースが生成した IOD を取得できるメソッドをデータベースが提供するため、機能します。しかし、Oracle とトリガーではそれができません。
データベースからトリガーを削除し、シーケンス ジェネレーターを使用すると、すべてがうまくいきます。