首页 > 解决方案 > 如何将多对多连接表的附加列映射到关联映射键?

问题描述

有一个实体调用版本,这个实体有一个内部连接多对多关系。桥表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")  

我可以做些什么来设置CODE值?

标签: javahibernate

解决方案


如果我正确理解您的需要,您应该通过以下方式更正您的映射:

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

推荐阅读