#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, вероятно, подойдет.