我已经看到了类似的问题而且无法从中找到答案
我有两个豆子,他们有单向的关系。
下表包含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并将其保留在请求跟踪中。但我觉得真的应该是一个更好的方式,我错过了一些东西