アディツア・ナラヤンディキシット:
私は以下のようなエンティティを持っています:
@Entity
public class Order {
@Id
private String orderId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false)
private Date created;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_at", nullable = false)
private Date updated;
@PrePersist
protected void onCreate() {
this.created = new Date();
this.updated = this.created;
}
@PreUpdate
protected void onUpdate() {
this.updated = new Date();
}
}
私は、特定の日付範囲内の日付を作成または更新したすべての注文を見つける必要があります。私は法の下に私のリポジトリで定義されていることを示します。
public interface OrderRepository extends PagingAndSortingRepository<Order, String>,
QuerydslPredicateExecutor<Order> {
public Page<Order> findByCreatedBetweenOrUpdatedBetween(Date startCreatedDate,
Date endCreatedDate, Date startUpdatedDate, Date endUptedDate, Pageable pageRequest);
}
私の質問は、私はちょうどを確認することができ、あるUpdated_date
代わりに、以下のように両方の作成・更新日時を、このために?
public Page<Order> findByUpdatedBetween(Date startUpdatedDate, Date endUptedDate, Pageable pageRequest);
私が観察するされupdated_date
た時間と同じ値で挿入の行で更新されますcreated_date
。私は提供された日付範囲のためupdated_dateチェックすると、私は、レコードのいずれかを見逃してしまう可能性があります。
ミッコMaunu:
いいえ、@PreUpdate
ときにコールバックメソッドが常に実行されない@PrePersist
コールバックメソッドが実行されます。@PrePersist
前に(直接またはカスケード)動作を持続して実行される@PreUpdate
データベースの更新前に。
JPA 2.1仕様(エンティティのためのライフ・サイクル・コールバック・メソッドのセマンティクス3.5.3)で、これは、次の言葉で語られています:
それぞれのEntityManagerが持続し、そのエンティティの削除操作が実行される前PrePersistとは、preremoveコールバックメソッドは、特定のエンティティのために呼び出されます。
...
更新前とPostUpdateコールバックは、それぞれエンティティデータへのデータベースの更新操作の前と後に発生します。