2012-05-17 62 views
0

林困惑与JPA多对一关系,我有一类“判断”,其具有许多“判断”,当我试图存储判断实例放入postgres的分贝,它投掷错误消息为:休眠对象引用一个未保存的瞬态的实例

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

你的代码表明,法官有很多的判断,而不是相反 – kem

+0

其他方式,你既创造了新的判断,并在同一时间,新用户? – kem

+0

@kem:用户是管理员用户,当用户登录到系统,他们需要做的判断创建的,所以我只能创建新的判断和现有的用户分配作为判决的法官,在同一时间不能同时创建。同样,如果我想删除任何判断,用户应该根本没有触动。 – user468587

回答

0

首先,如果像你所说,你正在寻找一个判断,有许多法官,你有事情落后。作为KEM在他的评论暗示,顺便你现在编码许多判断有一个法官,逆之处在于一个法官可能有许多判断。

在回答你的问题,是与您正试图保存本身并未被保存的判断相关的判断。您的级联定义不允许坚持级联进入法官,因此JPA别无选择,只能抛出异常。您可以更改级联定义,或手动保存裁判。如果法官是持久性的,但是分开,那么您可能需要先将其合并以将其重新附加到实体经理。

相关问题