何:
私は現在のタイムスタンプのデフォルト値を持つ日付フィールドを持つテーブルを持っています。私はそのテーブルの行を作成するとき、これは罰金を動作します。
私はその行を更新すると、私はそのタイムスタンプが自動的に更新されることを期待それが更新されていません。私が間違ってやっているものに何かアドバイスを感謝しています。
これは私のEntityクラスでフィールドです。
// Date is of type import java.util.Date;
@UpdateTimestamp // expecting this to do the auto update.
@Temporal(TemporalType.TIMESTAMP)
private Date updatedAt;
これは私のリポジトリの界面でのクエリです。
// I don't intend to pass in current timestamp as a 3rd param for updateAt field. I expect it to just auto update to current time stamp.
@Modifying
@Query("update table as t set t.title =?1 where t.Id = ?2")
void update(String title, long id);
上記のクエリはタイトルだけとidはなくupdatedAt日付フィールドを更新します。また、違いはありませんEntityクラスの下に次のことを試してみました。
@PreUpdate
protected void onUpdate(){
updatedAt = new Date();
}
ヘルマンSteidel:
私は@PreUpdateはJPA / Hibernateの機能であるので、これは正常な動作です疑われます。あなただけのクエリを使用すると、あなただけのHibernateのエンティティのライフサイクルを経ていない「プレーンSQL」を呼び出しています。私は周りを見回したといくつかの確認を見つけました:
これは、ここにも答えた:春データJPA @PreUpdateがリポジトリから更新@queryを使用するときに呼び出しません