hibernate对象引用未保存的临时实例
我对JPA-Manytone关系感到困惑,我有一个类“Dediction”,它有许多“Judicate”,当我试图将一个Dedication实例存储到postgres db中时,它抛出错误消息如下:hibernate对象引用未保存的临时实例,hibernate,jpa,Hibernate,Jpa,我对JPA-Manytone关系感到困惑,我有一个类“Dediction”,它有许多“Judicate”,当我试图将一个Dedication实例存储到postgres db中时,它抛出错误消息如下: Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.
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;
}
}
}
在我的数据库中,我有判断表和用户表,我是否需要为manytone关系创建一个表作为判断用户 首先,如你所说,如果你正在寻找一个有很多法官的判决,那么你就有了倒退。正如kem在他的评论中所建议的那样,按照你现在的编码方式,许多判决都有一个法官,相反,一个法官可能有许多判决
在回答您的问题时,与您试图保存的判决相关联的法官本身未被保存。您的级联定义不允许persist级联到judge中,因此JPA别无选择,只能抛出异常。您可以更改级联定义,也可以手动保存判断。如果法官是持久性的,但是分离的,那么您可能需要首先将其合并,以将其重新连接到实体管理器。您的代码表明法官有许多判断,而不是相反,您是否同时创建新判断和新用户?@kem:User是由管理员用户在用户登录系统时创建的,他们需要做判断,所以我只创建新的判断,并将现有用户指定为该判断的判断者,而不是同时创建两者。另外,如果我想删除任何判决,用户应该完全不受影响。@kem:你是对的,我的意思是法官有很多判决。