С помощью JPA, если вы не используете @Inheritance с родительским / дочерним, использует ли eclipse link стратегию наследования по умолчанию?

#jpa

#jpa

Вопрос:

Я использую JPA с данными spring и eclipse link 2.5, с spring и java.

В настоящее время у меня есть 2 объекта

 @Entity
@Table(name="ORDER_TABLE")
public class Order
{.../*does not have an auditDate column*/}

@Entity
@Table(name="ORDER_AUDIT_TABLE")
public class Child extends Parent
{
    @Column(name="AUDIT_DATE")
    private Date auditDate;
...
}
  

Проблема в том, что когда я вызываю родительский репозиторий JPA simple для запроса родительского объекта

 Order order = orderRepository.findOne(orderId);
  

Это выдает мне ошибку, подобную следующей.

 Error Code: 904
Call: SELECT ID, ... AUDIT_DATE, FROM ORDER_TABLE WHERE (ID = ?)
    bind => [682]
...
ORA-00904: "AUDIT_DATE": invalid identifier
  

У меня сложилось впечатление, что если вы оставите @Inheritance выключенным, он не будет пытаться использовать какое-либо наследование JPA при взаимодействии с базой данных.

Однако, исходя из ошибки, которую я получаю, она действует так, как у меня @Inheritance(strategy=InheritanceType.SINGLE_TABLE) по заказу. Что наводит меня на мысль, что он добавляет его по умолчанию в фоновом режиме.

Есть ли какой-либо способ для @Entity расширить другой @Entity в Java без применения наследования JPA в фоновом режиме?

Причина, по которой я заинтересован в этом, заключается в том, что я хочу, чтобы любые изменения в Order также применялись к OrderAudit. Поэтому, когда разработчик меняет порядок и пытается запустить приложение, он выдает ошибку и сообщает им, что им также необходимо изменить таблицу OrderAudit .

Ответ №1:

По умолчанию используется SINGLE_TABLE при javax.persistence.Наследование отсутствует. Это задокументировано, например, в Javadocs:

Если аннотация наследования не указана или если для иерархии классов сущностей не указан тип наследования, используется стратегия сопоставления SINGLE_TABLE.

Если вместо такого наследования требуются только сопоставления из суперкласса, @MappedSuperclass, вероятно, подойдет.