@MappedSuperClass с @Audited работает, но вызывает ошибкуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 @MappedSuperClass с @Audited работает, но вызывает ошибку

Сообщение Anonymous »

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

Код: Выделить всё

    @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

//...

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
Придерживаясь принципа DRY (не повторяйтесь), я подумал, что было бы разумно превратить это в общий абстрактный родительский класс для использования всеми подклассами (и в некоторой степени это так и есть). ).

Код: Выделить всё

@MappedSuperclass
public abstract class LongIdEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

public LongIdEntity() {}

public LongIdEntity(Long id) {
this.id = id;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
}
Моя проблема возникает, когда я пытаюсь использовать этот абстрактный родительский класс с подклассом, который также помечен с помощью @org.hibernate.envers.Audited.
По какой-то причине Hibernate выдает следующую ошибку, когда какой-либо подкласс сопоставляется с @org.hibernate.envers.Audited и расширяет LongIdEntity.

Код: Выделить всё

ERROR 63328 --- [persistence] [           main] o.h.metamodel.internal.MetadataContext   : HHH015007: Illegal argument on static metamodel field injection : org.hibernate.envers.DefaultRevisionEntity_#class_; expected type :  org.hibernate.metamodel.model.domain.internal.EntityTypeImpl; encountered type : jakarta.persistence.metamodel.MappedSuperclassType
Я попробовал несколько вещей, но прежде чем углубляться в какие-либо попытки, я хотел бы отметить, что даже с ошибкой Hibernate по-прежнему создает таблицы так, как изначально предполагалось (то есть подкласс получает свой собственный уникальный столбец идентификатора, который проверяется, и результирующий синтаксис кода значительно сокращается, поскольку нам нужно объявить длинный идентификатор только один раз во всем приложении и при необходимости можно использовать его повторно).
Что касается попыток, которые я пробовал,
  • Аннотирование родительского и подкласса с помощью @Audited - что привело к той же ошибке
  • Аннотирование подкласса только с помощью @Audited — это параметр, который я сейчас использую, что приводит к функциональному спящему режиму, несмотря на сообщение об ошибке.

    Аннотирование только суперкласса, который ничего не делает (это намеренно), поскольку поля родительских классов наследуются в подклассы, как если бы они были их собственными столбцами, в результате родительский класс не имеет собственной таблицы и, соответственно, не подвергается аудиту. Кроме того, ошибка исчезает, что довольно странно, учитывая, что сообщения об ошибках заключаются в том, что спящий режим ожидал тип сущности и получил тип сопоставленного суперкласса, и обе эти аннотации применяются к одному и тому же родительскому классу одновременно.
    < /li>
Я могу оставить все как есть, но меня беспокоят подобные вещи, потому что, хотя технически сейчас это работает, это может привести к некоторым непредвиденным последствиям. /ошибки в будущем.

Подробнее здесь: https://stackoverflow.com/questions/781 ... g-an-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»