나는 단방향 일대 다 서로를 가진 두 개의 클래스가 있습니다.일대 다 관계에서의 CascadeType 문제
public class Offer{
...
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "Offer_Fields",
joinColumns =
@JoinColumn(name = "OFFER_ID"),
inverseJoinColumns =
@JoinColumn(name = "FIELDMAPPER_ID"))
private Set<FieldMapper> fields = new HashSet<FieldMapper>();
}
@Entity
@Table(name = "FieldMapper")
public class FieldMapper implements Serializable {
@Id
@Column(name = "FIELDMAPPER_ID")
@GeneratedValue
private int id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "multilingual_field_fk")
private MultiLingual field;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "multilingual_value_fk")
private MultiLingual value;
}
데이터베이스에 FieldMapper 세트와 함께 오퍼를 저장하려고합니다. 내 OneToMany에 CascadeType.ALL을 사용하면,이 오류가있어 :
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
을 내가 다른 것으로 CascadeType를 변경할 때이 오류가있어 :
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.RCSTT.library.FieldMapper
을하고 여기에 내가 제안을 저장할 곳이다 :
public void insert(Offer offer) throws SQLException {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(offer);
tx.commit();
session.close();
}
나는 다른 곳에서 세션을 사용하지 않습니다.
tx.commit();
라인 스로우 설명 예외.
도움 주셔서 감사합니다.
호기심에서 벗어나 테이블의 동일한 열 집합과 관련된 일대 다 관계가 있습니까? 나는 이것이 수학적으로 가능한 방법을 궁금해하고있다. –
No. 각 클래스는 자체 테이블에 고유 한 열을 가지고 있지만 제 경우에는 관계를 관리하기 위해 조인 테이블이 만들어집니다 (조인 테이블없이 일대 다 관계를 만들 수 있음). –
글쎄, FieldMapper 클래스의 코드를 게시하는 것이 유용 할 수 있습니다. 웬일인지, 나는 이것이 ManyToMany 관계라고 생각한다. –