В моих классах есть следующая иерархия
@Entity
@Table(name = "Parent")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Parent {
}
@Entity
@DiscriminatorVlaue("FirstChild")
public class FirstChild extends Parent {
}
@Entity
@DiscriminatorVlaue("SecondChild")
public class SecondChild extends Parent {
}
Это создает таблицу Parent, как и ожидалось.
Некоторая бизнес-логика в моем приложении:
Когда запрос принят, он сохраняется как тип "Parent" и создает следующую запись в таблице
Dtype id value
Parent 1 "some value"
Поскольку запрос обрабатывается, он может быть типа FirstChild
или типа SecondChild
, поэтому в моем коде где-то у меня есть
if (some condition is met) {
// change the Parent to its firstChild type
}
else {
// chnage it to "SecondChild" type
}
Правильно ли мое понимание и использование наследования? Я, по сути, подавляю объекты в цикле if, которые генерируют исключения во время выполнения, но изменяет ли тип объекта также значение DTYPE
в базе данных? По сути, я использую наследование, чтобы держать вещи организованными как их типы. Есть ли какая-то магия, которую я могу сделать в конструкторах, чтобы добиться этого? Но реальный вопрос в том, является ли Dtype
изменяемым при обновлении?
Для дальнейшей работы с этим
Я создал contsructor в дочерних классах как
public FirstChild(Parent parent) {
id = parent.id
}
но это создает новую строку для подтипов,
Dtype id value
Parent 1 "some value"
FirstChild 2 "some value"
Я проверяю, что запись "firstChild" создана с родительским идентификатором (1), но я не уверен, почему создается вторая строка