2016-08-02 11 views
3

Ich bin der Gestaltung Datenbank und Organisationen. Ich muss für einige Entitäten gemeinsame Lebenszyklusaktionen definieren.Kann ich @EntityListener auf Schnittstellen mit Anmerkungen versehen?

Kann ich mit Anmerkungen versehen @EntityListeners auf Schnittstellen, so dass Unternehmen die Umsetzung der Schnittstelle beeinflusst?

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

public class StorageOwnerOwnerListener { 

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

Jetzt wird jede Entität implementiert werden betroffen.

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

@NeilStockton Ich würde diese Art von Frage nicht veröffentlichen, wenn ich über jede Implementierung bestimmtes Verhalten nicht kümmern wird. Was für ein klassischer Kommentar. –

Antwort

2

Ich habe versucht, dass mit JPA 2.1. Leider scheint es nur mit Entitäten zu funktionieren. Wenn Ihre Idee also eine Schnittstelle oder sogar eine Superklasse verwendet, die keine Entität ist, wird sie nicht funktionieren.

Specification sagt:

Wenn Anmerkungen verwendet werden, ein oder mehr Unternehmen Listener-Klassen sind mit der EntityListeners Anmerkung auf der Entity-Klasse oder abgebildet Superklasse bezeichnet.

Sie könnten jedoch einen Standard-Listener verwenden (in XML-Konfiguration festgelegt). Auf diese Weise würde es bei jedem Objekt ausgelöst werden, das entfernt wird. Sie müssten sie mit object instanceof StorageObjectOwner filtern.

-1

bitte den unten stehenden Link

Annotations on Interfaces?

Hoffnung klicken, die Ihre Frage beantwortet .i glauben Sie Frühling verwenden sollten Schnittstellen zu annotieren, wo die Anmerkung zu allen subclasses.For Beispiel gelten sollte, sagen Sie Sie haben eine Service-Schnittstelle und Sie haben möglicherweise mehrere Implementierungen der Schnittstelle, aber Sie möchten, dass eine Sicherheitsannotation unabhängig von der Anmerkung angewendet wird. In diesem Fall ist es am sinnvollsten, die Schnittstelle mit Anmerkungen zu versehen.

+0

und wenn die Person nicht Spring verwendet? –

+0

Das beantwortet die Frage nicht wirklich. Die Frage betrifft JPA, nicht Spring. Anmerkungen sind nur Metadaten und ihr Verhalten hängt vom Framework ab. – Vlasec

Verwandte Themen