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")
我可以做些什么来设置CODE值?
解决方案
如果我正确理解您的需要,您应该通过以下方式更正您的映射:
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>();
}
推荐阅读
- kubernetes - 如何使用 Java API 在 Kubernetes 中创建作业
- swift5 - 如何更改文本字段 .onTapGesture(Swift5、Xcode12.4)?
- python - 如果子字符串匹配,则替换列表中的元素
- python - 使用 FIFA 数据库根据条件添加新列
- git - 有没有办法从命令行获取拉取请求中的所有更改?
- c# - 在 VS 2019 中调试 React App 和 ASP.Net MVC 5 API
- google-codelab - 如何在 claat 中为代码实验室制作自己的模板
- java - 术语“-alias”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
- assembly - 汇编语言:小写字符串转大写
- docker - WSO2 API 管理 - Docker Compose - 使用默认参数安装后登录错误