Скажем, у меня есть таблица товар с колонки с именем user_id и пользовательской таблицы и другой называется суперпользователем:Как определить возможные несуществующие отношения в jpa?
CREATE TABLE Item(id int, user_id int, ..);
CREATE TABLE User(id int, ..);
CREATE TABLE Superuser(id int, ..);
Теперь все детали имеют запись пользователя, но только некоторые из них имеют запись суперпользователя, т.е. Item.user_id == User.id always и Item.user_id == Superuser.id не является обязательным.
Я могу подобрать пользовательскую часть, но у меня нет подсказки, как сопоставить Superuser. Например, это не работает:
@Entity
public class Item {
@ManyToOne(optional = true)
@JoinColumn(name = "user_id")
private Superuser su;
...
Это позволяет только user_id быть NULL, но у меня всегда есть user_id.
Мне нужно сообщить jpa, что «даже если будет внешний ключ», может не быть соответствующей записи в таблице суперпользователя.
Начнем с модели базы данных SQL ... Можно ли предположить, что ваша таблица 'Item' содержит два внешних ключа:' user_id int NOT NULL' (всегда) и 'superuser_id int' (необязательно)? – wypieprz
@wypieprz Нет, как определено в псевдо DDL, есть только один внешний ключ в Item, всегда соответствующий первичный ключ в User и необязательная запись в суперпользователе. – estani
звучит скорее как модель должна иметь поле типа «Пользователь» в классе Item, а Superuser расширяет пользователя, и таким образом, если связанный с ним объект является пользователем, тогда он получает пользователя, а если он является суперпользователем, он получает объект суперпользователя. –