2012-05-17 3 views
0

임은 JPA manytoone 관계와 혼동합니다. 나는 'judgies'가 많은 클래스 'judgment'를 가지고 있는데, postgres db에 판단 인스턴스를 저장하려고하면 다음과 같은 오류 메시지가 나타납니다.hibernate 객체는 저장되지 않은 일시적인 인스턴스를 참조합니다.

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; 
      } 
     } 
    } 

그리고 내 DB에 내가 판단 Judgment and User가 있는데, ManyToOne 관계에 대해 Judgement_User 테이블을 생성해야합니까?

+0

귀하의 코드는 판사가 많은 판단을하고 있음을 나타냅니다. 다른 방법은 아닙니다. – kem

+0

새로운 판단과 새로운 사용자를 동시에 작성하고 있습니까? – kem

+0

@kem : admin 사용자가 사용자를 만들었습니다. 사용자가 시스템에 로그인 할 때 판단을해야하기 때문에 새로운 판단을 작성하고 기존 사용자를 해당 판단의 판사로 지정하고 동시에 작성하지 마십시오. 또한 내가 판단을 지우고 싶다면 사용자는 전혀 손을 대지 않아야합니다. – user468587

답변

0

첫 번째로, 당신이 말했듯이, 당신이 많은 심사 위원을두기위한 판단을 찾고 있다면, 당신은 뒤로 물건을 가지고 있습니다. KEM 그의 코멘트에서 알 수 있듯이, 그런데 당신은 역이 판사가 많은 판단을 가질 수있는, 그것은 많은 판단이 판사가 지금 코딩 있습니다.

귀하의 질문에 대한 답변으로, 귀하가 저지하려고하는 판단과 관련된 판사는 그 자체로 구원받지 못했습니다. 당신의 캐스케이드 정의는 지속자가 판사에게 계단식으로 연결되는 것을 허용하지 않으므로 JPA는 예외를 던지기 만합니다. 계단식 정의를 변경하거나 수동으로 판사를 저장할 수 있습니다. 판사가 지속적이지만 분리 된 경우 먼저 마스터를 병합하여 엔티티 관리자에게 다시 첨부해야 할 수 있습니다.

관련 문제