JPA ПРИСОЕДИНИЛСЯ к стратегии наследования. Возможно ли создать суперкласс экземпляра JPA вместо разрешения полиморфного типа?

#java #hibernate #jpa #inheritance

#java #спящий режим #jpa #наследование

Вопрос:

У меня есть модель, использующая тип инерционности, ОБЪЕДИНЕННЫЙ в JPA. В настоящее время, когда другие объекты присоединяются к нему, они заполняются экземплярами дочернего класса. Можно ли заставить Hibernate / JPA прекратить разрешать полиморфный тип, поэтому, если я вызову другой объект:

 @ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "parentid", referencedColumnName = "id", nullable = true, insertable = false, updatable = false)
private Parent parent;
  

экземпляр является a new Parent(id,name) вместо a new Child(id,name,other) ?

Комментарии:

1. если что-то возвращается как родительское, то база данных обычно подразумевает родительское. Вы не публикуете сведения о родительских / дочерних классах или о том, какие данные находятся в базе данных, или какой SQL выдается для извлечения поля. У вас всегда есть дискриминатор, который вы могли бы добавить, но это всего лишь оптимизация

2. Если у вас есть дочерний id = 1, вы просите JPA вернуть родительский экземпляр с id = 1? Что произойдет, когда вы внесете изменения в этот родительский экземпляр, если для поля «другое» будет установлено значение null? Что вы хотите, чтобы произошло, когда дочерний id = 1 уже был прочитан, создан и существует в контексте сохранения, должен ли JPA запрашивать и перестраивать родительский экземпляр для вас, когда он содержит те же данные? То, о чем вы просите, не поддерживается, потому что им сложно управлять надежно и быстро приводит к проблемам, когда есть простое решение: если вы не хотите полиморфизма, не используйте наследование Java.