【发布时间】:2010-05-24 19:57:55
【问题描述】:
我有两个类,它们之间存在单向一对多关系。
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 的 Offer 存储到数据库中。 当我在 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(); 行中抛出解释异常。
感谢您的帮助。
【问题讨论】:
-
只是出于好奇,一对多关系是否涉及表中的同一组列?我只是想知道这在数学上是怎么可能的。
-
没有。每个类在自己的表中都有自己的列,但在我的例子中,将创建一个 Join 表来管理关系(您可以创建一个没有连接表的一对多关系)。
-
好吧,然后发布 FieldMapper 类的代码可能会很有用。出于某种原因,我相信这是一种多对多关系。
标签: java hibernate cascade hibernate-onetomany