Hibernate 4.x не может загрузить имена столбцов сущности суперкласса, если вызывающий класс использует аннотацию lombok @Data

Привет, я использую lombok api с классом сущности, имеющим аннотацию @Data, которая расширяет класс аудита (общие столбцы), который является простым абстрактным классом с аннотацией @MappedSuperclass. Но когда загружается hibernate-jpa, он не выбирает имена столбцов, а вместо этого выбирает фактические имена переменных-членов.

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "TEST_TYPES", schema = "TESTER")
@EqualsAndHashCode(callSuper = false, of = {"id"})
public class TestEntity extends AuditEntity {
    @Id
    @Column(name = "TYPE_ID")
    private Short id;

    @Column(name = "NAME")
    private String name;    
}


    @MappedSuperclass
public abstract class AuditEntity implements Serializable {
    private static final long serialVersionUID = 3487394229267512541L;
    private String createdBy;
    private Date createdDate;

    @Column(name = "CREATE_ID", length = 40)
    public String getCreatedBy() {
        return this.createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "CREATED_DATE", length = 7)
    public Date getCreatedDate() {
        return this.createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

}

Проблема: Гибернация выдает эту ошибку .. Вызвано: java.sql.SQLSyntaxErrorException: ORA-00904: «TESTPROJJU0 _». «CREATEDBY»: недопустимый идентификатор

Ожидал: hibernate должен выбрать имя столбца, то есть "CREATED_BY", но он выбирает "createdby"

Я ценю любое предложение / помощь.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
261
2

Ответы 2

Это может иметь какое-то отношение к стратегии именования JPA. Установка свойства

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

должны принимать фактические имена столбцов, которые вы указали.

Спасибо за ваш ответ. Но ваше предложение поддерживает спящий режим 5.0 и выше. Но я использую hibernate4.x

joe4java 23.03.2018 17:27

хорошо, лучше добавьте это к своему вопросу, другие могут также предложить материал hibernate5

msp 26.03.2018 09:18

Вы не указываете имя с помощью аннотации @Column.

Привет, Нивер, я использую аннотацию @Column для геттеров, и это нормально.

joe4java 23.03.2018 17:30
@Column(name = "CREATE_ID" не должен ли это быть @Column(name = "CREATED_BY"?
NiVeR 23.03.2018 18:25

Другие вопросы по теме