Как сопоставить дополнительный столбец таблицы соединений «многие ко многим» с ключом сопоставления?

#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>();
    
}