在使用hibernate通过MySQL数据库的spring mvc应用程序中,我有一个Document
实体,每个document
对象包含不同类型的codes
,它们都是{{1}的实例}} 实体。 Code
实体包含由Code
和code.pk.code
组合定义的可能值的不同列表,code.pk.codesystem
是对复合主键的引用。每个pk
对象可能被许多code
个对象引用。
如何在hibernate和MySQL中映射它?
我现在的方式已经布局了,每当我尝试存储包含已经存储的document
的{{1}}时,我一直会遇到有关违反Code
主键约束的错误在基础MySQL数据库的Document
表中。具体来说,当我的dao运行以下代码行时:
code
立即抛出以下错误:
codes
程序崩溃了,所以我不知道是否会将this.entitymanager.persist(document)
保存到数据库中的Hibernate: insert into codes (displayname, code, codesystem) values (?, ?, ?)
WARN SqlExceptionHelper - SQL Error: 1062, SQLState: 23000
ERROR SqlExceptionHelper - Duplicate entry 'somecode-somecodesystem' for key 'PRIMARY'
表中。为什么会尝试保存到document
表?有没有什么方法可以设置,以便只将documents
的引用保存到codes
表?删除关系并只存储密钥会很麻烦作为code
表中的字符串,未加入documents
到documents
。
这是我的java:
codes
答案 0 :(得分:0)
解决方案是从CascadeType.ALL
关系中移除ManyToOne
,现在它看起来如下:
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "confidentiality_code", referencedColumnName = "code"),
@JoinColumn(name = "confidentiality_codesystem", referencedColumnName = "codesystem"),
})
public Code conftype;
此问题现已成功解决。问题回答了。