我与JPA多关系混淆,我有一个“判断”类,有很多“评判”,当我试图将判断实例存储到postgres db时,它会抛出错误信息:
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.dyihi.evaluation.model.Judgement.judge -> com.dyihi.evaluation.model.User
判决班:
@Entity
@Table(name = "JUDGEMENTS")
public class Judgement implements Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = -7049957706738879274L;
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumn(name = "user_id")
private User judge;
和我的服务类:
public Long store(Judgement judgement) throws RepositoryException {
EntityManager em = null;
EntityTransaction tx = null;
try {
em = _emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
em.persist(judgement);
tx.commit();
return judgement.getId();
}
finally {
if (tx != null && tx.isActive()) {
tx.rollback();
}
if (em != null) {
em.close();
em = null;
}
}
}
在我的数据库中我有表判断和用户,我是否需要为ManyToOne关系创建一个表作为Judgement_User?
答案 0 :(得分:0)
首先,如果按照你的说法,你正在寻找一个有很多法官的判决,你就会有落后的事情。正如kem在他的评论中所暗示的那样,你现在编码的方式许多判断有一个判断,相反的是一个判断可能有< em>许多判断。
在回答您的问题时,与您试图保存的判决相关的法官本身并未得到保存。您的级联定义不允许持久化程序级联到判断中,因此JPA别无选择,只能抛出异常。您可以更改级联定义,也可以手动保存判断。如果判断是持久的,但是已经分离,那么您可能需要先将其合并以将其重新连接到实体管理器。