保存对其他实体的引用

时间:2014-08-08 16:47:01

标签: java mysql hibernate jpa

在使用hibernate通过MySQL数据库的spring mvc应用程序中,我有一个Document实体,每个document对象包含不同类型的codes,它们都是{{1}的实例}} 实体。 Code实体包含由Codecode.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表中的字符串,未加入documentsdocuments

这是我的java:

codes

1 个答案:

答案 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;

此问题现已成功解决。问题回答了。