質問

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private int salary;

    @Version
    private long version;

    // ...getters and setters
}
  1. セッター/ゲッターを作成する必要がありますか? version?
  2. このエンティティを Hibernate で永続化する場合、この値を手動で設定する必要はありません。
  3. Spring のオプティミスティック同時実行チェックを使用するには、他に何を設定する必要がありますか? hibernateTemplate.saveOrUpdate?すべてのデータベースがサポートされていますか?
  4. このエンティティを単体テストするにはどうすればよいですか?私のデータベースでは、バージョンフィールドを示すすべてのレコードの値が0です
  5. ウィルコール hibernateTemplate.saveOrUpdate 毎回バージョン値をインクリメントしますか?
役に立ちましたか?

解決

私ならこう言います:

  1. バージョンを自分で割り当てる場合があるため (古いデータから新しいインスタンスを再作成する場合)、バージョンの設定/取得が必要です。
  2. データベースからインスタンスを読み取る場合は必要ありません。(new を使用してコード内に作成する場合は、別の話になります)。
  3. 他には何も見えません。データベースで問題が発生したことはありません。
  4. 私の考えでは、単体テストはデータベースを対象としていないため、データベースを含むテストは統合テストと呼ばれます。それらは遅く、実際にはコードをテストしませんが、Hibernate/Driver/Database コードをテストするため、あまり多すぎないようにすべきです。これらを信頼するか、一度だけテストする必要がありますが、すべてのエンティティに対してテストする必要はありません。
    0 より大きいバージョン値を確認するには、トランザクションでエンティティを読み取り/変更/更新すると、バージョンが 1 つ増えます。トランザクションを終了し、もう一度実行すると、値が増加します...
  5. データベースの行が変更されるたびにバージョンが増加します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top