2016-08-02 11 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

и если человек не использует весну? –

+0

Это не отвечает на вопрос. Вопрос касается JPA, а не Spring. Аннотации - это всего лишь метаданные, и их поведение зависит от структуры. – Vlasec