JPA onetoone关系目标获取插入而不是更新

时间:2015-03-02 18:05:25

标签: java mysql jpa

我已经看到了类似的问题而且无法从中找到答案

我有两个豆子,他们有单向的关系。

下表包含Requestattachment的forigen键

public class Requesttracking implements Serializable {
@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
@JoinColumn(name="raid")
private Requestattachment requestattachment;

这是我用来存储附件的表

public class Requestattachment implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int raid;

@Lob
private byte[] attachment;

现在要添加一个新实体,我可以添加Requesttracking.set(requestattachment)并保留它并且它可以正常工作。

我的问题是当我尝试更新请求时。

Requesttracking r=em.find(Requesttracking.class, rt.getRqid());
r.setRequestattachment(rt.getRequestattachment());
em.flush();

而不是更新请求附件,这样做会创建一个新的requestattachement将它添加到requestattachment表并将新的forigen键添加到requesttracking表。

我遇到的问题是,现在只有一个条目在requestattachment中没有任何意义。

我想要发生的是requestattachment保留相同的主键只更新附件因此请求跟踪中的外键保持不变。

我想到了几种可以解决这个问题的方法,只需在我更新时删除旧的requestattachment。或手动更新requestattachment并将其保留在请求跟踪中。但我觉得真的应该是一个更好的方式,我错过了一些东西

0 个答案:

没有答案