Могу ли я аннотировать @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?
}

person Jin Kwon    schedule 02.08.2016    source источник
comment
@NeilStockton Я бы не стал публиковать такой вопрос, если бы меня не заботило какое-либо конкретное поведение реализации. Какой классический комментарий.   -  person Jin Kwon    schedule 02.08.2016


Ответы (2)


Я пробовал это с JPA 2.1. К сожалению, кажется, что это работает только с сущностями. Поэтому, если ваша идея использует интерфейс или даже суперкласс, который не является сущностью, она не сработает.

Спецификация гласит:

Когда используются аннотации, один или несколько классов прослушивателей сущностей обозначаются с помощью аннотации EntityListeners в классе сущностей или сопоставленном суперклассе.

Однако вы можете использовать прослушиватель по умолчанию (установленный в конфигурации XML). Таким образом, он будет срабатывать при удалении любого объекта. Вам придется фильтровать их с помощью object instanceof StorageObjectOwner.

person Vlasec    schedule 19.10.2016

пожалуйста, нажмите на ссылку ниже

Аннотации к интерфейсам?

надеюсь, что это ответит на ваш вопрос. Я считаю, что вы должны использовать Spring для аннотирования интерфейсов, где аннотация должна применяться ко всем подклассам. Например, скажем, у вас есть интерфейс службы, и у вас может быть несколько реализаций интерфейса, но вы хотите, чтобы аннотация безопасности применялась независимо от аннотации. В этом случае имеет смысл аннотировать интерфейс.

person Saurabh Verma    schedule 02.08.2016
comment
а если человек не использует Spring? - person Neil Stockton; 02.08.2016
comment
Это на самом деле не отвечает на вопрос. Вопрос о JPA, а не о Spring. Аннотации — это просто метаданные, и их поведение зависит от фреймворка. - person Vlasec; 19.10.2016