是否可以在每次刷新數據庫之前更新某個列?我有modifiedOn
和modifiedBy
列,並且希望在每次數據庫更新時更新它們,類似於數據庫觸發器。 JPA有可能嗎?刷新前修改實體
Q
刷新前修改實體
3
A
回答
1
免責聲明:以下僅適用於Hibernate/JPA。
您可以使用JPA更新modifiedOn
屬性是這樣的:
public class Entity {
private Date modifiedOn;
@PreUpdate
@PrePersist
public void updateModified() {
modifiedOn = new Date();
}
}
至於modifiedBy
,這是一個有點棘手,因爲JPA規範鼓勵在生命週期回調方法的其他實體的引用。此外,您需要了解當前用戶的一些知識,這可能屬於服務層。
你可以使用一個EntityListener
這樣的(然而,這仍然採用了回調方法)
@Entity
@EntityListeners({MyListener.class})
public class MyEntity {
Date modifiedOn;
User modifiedBy;
...
}
一個在EntityListener:
public class MyListener {
CurrentUserProvider provider; // Implement this and make sure it is set
@PreUpdate
@PrePersist
public void updateModifier(MyEntity entity) {
entity.setModifiedOn(new Date());
entity.setModifiedBy(provider.getCurrentUser());
}
}
-1
顯然,JPA具有在規範中定義的實體回調,例如@PrePersist,@PreUpdate。簡單的規範修訂會給你更多的細節
相關問題
- 1. Java JPA:刷新實體修改
- 2. GWT刷新修改
- 3. Doctrine2 - 在刷新前獲取實體ID
- 4. 驗證NHibernate中修改前的實體
- 5. 刷新JPA實體
- 6. 實體框架刷新實體不刷新其外鍵
- 7. AdSense - 刷新修改頁面
- 8. 刷新代碼修改 - JHipster
- 9. 刷新已修改的iframe
- 10. 使用修改後的子實體更新分離的實體
- 11. 重新連接嵌套子實體修改實體
- 12. BreezeJS實體不斷刷新?
- 13. IsDirty()刷新收集實體
- 14. 錯誤刷新JPA實體
- 15. 刷新實體拋出NHibernate.UnresolvableObjectException
- 16. 實體框架 - 更新實體添加/修改的孩子和孫子實體
- 17. 修改sap.ui.table.Table中的實體
- 18. 在PHP中修改當前URL而不刷新頁面
- 19. 如何在ApplyUpdates之前將修改的記錄刷新到CloneSource?
- 20. 學說:在刷新主要實體之前重置外部實體
- 21. 更新後強制實體刷新
- 22. DataGridView不會刷新收藏修改
- 23. 修改刷新/事件頁面請求
- 24. 如何修改dashlets以自動刷新?
- 25. 刷新數據表修改與jQuery的
- 26. Android SQLite在修改後刷新數據
- 27. Webstorm不刷新修改JavaScript文件
- 28. 用NSMutableDictionary的修改內容刷新NSTableView
- 29. 如何創建新的實體對象,在SaveChanges()之前修改模型
- 30. 在刷新實體之前計算唯一別名
你試試這個?它對你有用嗎? – Oliv
我讀過它在我目前使用的EclipseLink中不起作用。看到這裏:http://stackoverflow.com/a/1877631/952135 – Oliv
這就是我們如何在JPA2.0 + Hibernate + Spring上做到這一點。不確定EclipseLink是否支持它。 – RJo