@PostLoad в суперклассе - PullRequest
       1

@PostLoad в суперклассе

1 голос
/ 24 февраля 2011

У меня есть несколько классов сущностей.Теперь я хочу использовать @PostLoad в каждой сущности.Код функции для каждого объекта одинаков.Поэтому я создал суперкласс (открытый абстрактный класс AbstractModel {..}), который содержит метод @PostLoad.Теперь это возможно сделать?В быстром тесте метод не выполняется, но метод выполняется, помещенный в сущность ... Может быть, у кого-то есть обходной путь для этого?

@MappedSuperclass
public class Parent implements Serializable
{

    @PostLoad
    public void postLoad()
    {
        System.out.println("postLoad called!");
    }


}

Мой класс сущности, который расширяется от Parent:

@Entity
@Table(name = "albums") //de naam van de tabel wordt 'albums'
public class Album extends Parent implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id") //de naam van de kolom wordt 'id'
    private Long id;

...
}

И ошибка при запуске:

Исключение [EclipseLink-30005] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException Исключение Описание: Возникло исключение при поиске архивов постоянства с помощью ClassLoader: sun.misc.Launcher$AppClassLoader@11b86e7

Внутреннее исключение: javax.persistence.PersistenceException: Exception [EclipseLink-2801Службы постоянства - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.EntityManagerSetupException

Исключение Описание: сбой предварительной установки PersistenceUnit [JPA_TestPU].

Внутреннее исключение: исключение [EclipseLink-7161] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.ValidationException Описание исключения: класс сущностей [class jpatest.Album] имеетпервичный ключ не указан.Он должен определять либо @Id, @EmbeddedId, либо @IdClass.Если вы определили PK с помощью любой из этих аннотаций, убедитесь, что в иерархии классов сущностей нет смешанного типа доступа (аннотированные поля и свойства).

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Вы непреднамеренно переключаете типы доступа, а EclipseLink игнорирует аннотации полей.Поскольку @PostLoad вызывает это, я рекомендую оставить сообщение об ошибке.Если вы используете JPA 2.0, вы можете указать тип доступа непосредственно в Альбоме или, если вы используете JPA 1.0, просто аннотировать для доступа к свойству:

@Entity
@Table(name = "albums") //de naam van de tabel wordt 'albums'
public class Album extends Parent implements Serializable
{
    private static final long serialVersionUID = 1L;

    private Long id;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id") //de naam van de kolom wordt 'id'
    public Long getId(){
        ...
    }

    public Long setId(Long id){
        ...
    }
}
0 голосов
/ 24 февраля 2011

По крайней мере "Java Persistence with JPA" говорит, что это должно работать при применении к сопоставленному суперклассу (пометьте AbstractModel @MappedSuperClass).

0 голосов
/ 24 февраля 2011

Была ли ваша Абстрактная Модель сопоставлена ​​с @MappedSuperclass?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...