#java #hibernate
#java #спящий режим
Вопрос:
Существует версия вызова сущности, и эта сущность имеет внутреннее отношение «многие ко многим». Таблица мостов VER_EQUIVALENTS содержит столбцы [VER_ID, EQUIVALENT_VER_ID, CODE], а столбец CODE содержит код эквивалентной версии.
Вот как я реализовал это отношение.
public class Version {
private String code;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(
name = "VER_EQUIVALENTS",
joinColumns = {@JoinColumn(name = "VER_ID")},
inverseJoinColumns = {@JoinColumn(name = "EQUIVALENT_VER_ID")}
)
@MapKey(name = "code")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
private Map<String, Version> equivalentVersions = new HashMap<String, Version>();
}
Это то, что я получил, когда попытался вставить версию, содержащую эквивалентные версии.
ORA-01400: cannot insert NULL into ("VER_EQUIVALENTS"."CODE")
Что я могу сделать, чтобы установить значение КОДА?
Ответ №1:
Если я правильно понимаю, что вам нужно, вы должны исправить свое сопоставление следующим образом:
public class Version {
// ...
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(
name = "VER_EQUIVALENTS",
joinColumns = {@JoinColumn(name = "VER_ID")},
inverseJoinColumns = {@JoinColumn(name = "EQUIVALENT_VER_ID")}
)
@MapKeyColumn(name = "CODE")
private Map<String, Version> equivalentVersions = new HashMap<String, Version>();
}