2016-08-02 60 views
3

我正在設計數據庫和實體。我需要爲某些實體定義共享生命週期操作。我可以在接口上註釋@EntityListener嗎?

我可以在接口上註釋@EntityListeners,以便實現接口的實體會影響?

@EntityListeners({StorageObjectOwnerListener.class}) 
public interface StorageObjectOwner { 
} 

public class StorageOwnerOwnerListener { 

    @PreRemove 
    private void onPreRemove(final Object object) { 
    } 
} 

現在任何實體受到影響。

public class MyEntity implements StorageObjectOwner { 
    // will StorageObjectOwnerListener take action? 
} 
+0

@NeilStockton如果我不關心任何實現的具體行爲,我不會發布這樣的問題。多麼經典的評論。 –

回答

2

我試過用JPA 2.1。可悲的是,它似乎只與實體合作。因此,如果你的想法使用的是一個接口,或者甚至是一個不是實體的超類,那麼它將無法工作。

Specification說:

當使用註解,一個或多個實體監聽類 使用關於實體類或 映射超所述EntityListeners註釋表示。

但是,您可以使用默認偵聽器(在XML配置中設置)。這樣它會觸發任何被刪除的對象。你必須用object instanceof StorageObjectOwner來過濾它們。

-1

請點擊以下鏈接

Annotations on Interfaces?

希望回答你的問題。我相信你應該使用Spring註釋界面在註釋應適用於所有subclasses.For例如,假設你有一個服務接口,你可能有多個接口的實現,但是你想要一個安全註解來應用,而不管註釋是什麼。在這種情況下,最有意義的是對接口進行註釋。

+0

如果這個人不使用Spring? –

+0

這並沒有真正回答這個問題。問題是關於JPA,而不是Spring。註釋只是元數據,它們的行爲取決於框架。 – Vlasec

相關問題