JPA @バージョン:それの使い方?
質問
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- セッター/ゲッターを作成する必要がありますか?
version
? - このエンティティを Hibernate で永続化する場合、この値を手動で設定する必要はありません。
- Spring のオプティミスティック同時実行チェックを使用するには、他に何を設定する必要がありますか?
hibernateTemplate.saveOrUpdate
?すべてのデータベースがサポートされていますか? - このエンティティを単体テストするにはどうすればよいですか?私のデータベースでは、バージョンフィールドを示すすべてのレコードの値が0です
- ウィルコール
hibernateTemplate.saveOrUpdate
毎回バージョン値をインクリメントしますか?
解決
私ならこう言います:
- バージョンを自分で割り当てる場合があるため (古いデータから新しいインスタンスを再作成する場合)、バージョンの設定/取得が必要です。
- データベースからインスタンスを読み取る場合は必要ありません。(new を使用してコード内に作成する場合は、別の話になります)。
- 他には何も見えません。データベースで問題が発生したことはありません。
- 私の考えでは、単体テストはデータベースを対象としていないため、データベースを含むテストは統合テストと呼ばれます。それらは遅く、実際にはコードをテストしませんが、Hibernate/Driver/Database コードをテストするため、あまり多すぎないようにすべきです。これらを信頼するか、一度だけテストする必要がありますが、すべてのエンティティに対してテストする必要はありません。
0 より大きいバージョン値を確認するには、トランザクションでエンティティを読み取り/変更/更新すると、バージョンが 1 つ増えます。トランザクションを終了し、もう一度実行すると、値が増加します... - データベースの行が変更されるたびにバージョンが増加します。
所属していません StackOverflow