У меня есть главная таблица A с составным первичным ключом, состоящая из двух столбцов. Одна из этих столбцов - постоянная («ПОСТОЯННАЯ ЗНАЧЕНИЕ» в коде ниже). Это определение таблицы выглядит следующим образом:Спящий режим, как использовать константу как часть составной внешней ссылки
@Entity public class Master {
@Id
@Column(name = "SIGNIFICANT_KEY")
private String realKey;
@Id
@Column(name = "CONSTANT_KEY")
private String constantPartKey;
}
У меня есть детали таблица B, ссылки на главную таблицу А, используя только один (непостоянный) столбца. Я хочу реализовать обычные отношения ManyToOne и OneToMany между двумя таблицами.
Вопрос: Как я могу справиться с этой ситуацией в Hibernate?
Единственное решение для мастер-ссылки я нашел основывается на использовании формул :
@Entity public class Detail {
@ManyToOne
@JoinColumnsOrFormulas(value={
@JoinColumnOrFormula(column=
@JoinColumn(name = "SIGNIFICANT_KEY",
referencedColumnName = "SIGNIFICANT_KEY",
insertable=false, updatable=false, nullable = false)),
@JoinColumnOrFormula(formula=
@JoinFormula(referencedColumnName="CONSTANT_KEY", value="'THE CONSTANT VALUE'"))
})
Master master;
}
Теперь я вижу другую проблему: Я не могу использовать это поле в OneToMany связи в связи с проблемой java.lang.ClassCastException я «ве сообщили здесь раньше: https://hibernate.onjira.com/browse/HHH-6811
Как первичный ключ состоит из постоянного столбца? В ситуации, в которой вы описываете «реальный» ключ, находится непостоянный столбец составного ключа. –
@James DW Конкретное наследие * приложение * использует постоянное значение для второй части ключа. То же приложение имеет таблицу подробностей, которая опирается на эту «функцию». – Vladimir