gpt4 book ai didi

java - 一对多关系中的 CascadeType 问题

转载 作者:行者123 更新时间:2023-12-01 05:56:07 25 4
gpt4 key购买 nike

我有两个类,彼此之间具有单向一对多关系。

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

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

tx.commit();行抛出解释的异常。

感谢您的帮助。

最佳答案

第一个异常(exception)让我相信这不是映射/实体的问题,而是对象生命周期或 Hibernate session 处理方式的问题。

您尝试保存的 FieldMappers 是否已持久存在(在另一个 session 中)?您可能需要先分离它们。

关于java - 一对多关系中的 CascadeType 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com