2010-08-24 58 views
0

我對使用JPA稍微有些新東西 - 我會把它放在那裏。我越來越熟悉它,但是現在我的知識存在很大的漏洞。JPA將邏輯添加到刪除實體

我正在使用JPA的應用程序,並刪除使用EntityManager.remove(對象實體)函數的實體。然而,應用程序也鏈接到第三方應用程序,並且我想添加從持久層中刪除特定類型的實體時執行的邏輯。

我的問題是這樣的。有沒有辦法在Entity類級別上向EntityManager.remove(Object entity)函數添加邏輯,這樣每次刪除該類型的實體時都會執行額外的邏輯?

非常感謝。

回答

3

實體類可能有註解爲@PreRemove@PostRemove的方法。

+0

我正在尋找那些,看起來像我在找什麼。看起來PostRemove被調用更接近提交點。雖然我看到它不能保證數據庫實體實際上被刪除,但它至少不容易受到事務回滾的影響。那是對的嗎? – MikeTheReader 2010-08-24 18:07:43

+0

到目前爲止,我還記得,@PreRemove將總是在tx內被調用,但@PostRemove可以在tx內部或外部調用,具體取決於何時發生刷新,這將至少在提交之前發生,但也可以在tx內發生。我懷疑你應該在PreRemove中做這項工作,並確保你從tx的角度來看你所做的事情是否可行。 – ewernli 2010-08-24 18:35:39

0

如果您使用Eclipselink,它通過DescriptorEventListener接口具有更細粒度的本地事件系統。

+0

我實際上使用的是TopLink,但是對於我一直髮現的關於Eclipselink的一切,它看起來像是功能更全面的親戚。 – MikeTheReader 2010-08-24 19:16:35