簡體   English   中英

一對多關系中的CascadeType問題

[英]CascadeType problem in One to Many Relation

我有兩個類,它們之間具有單向一對多關系。

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

這是我保存Offer的地方:

public void insert(Offer offer) throws SQLException {
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    session.save(offer);
    tx.commit();
    session.close();
}

而且我不在其他地方使用會話。

tx.commit(); 行拋出解釋了異常。

謝謝你的幫助。

第一個例外使我相信這不是您的映射/實體的問題,而是對象生命周期或Hibernate會話的處理方式。

您要保存的FieldMappers是否已經永久保存(在另一個會話中)? 您可能需要先分離它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM