#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.