gpt4 book ai didi

java - Hibernate 不向关联添加记录

转载 作者:行者123 更新时间:2023-12-02 07:44:52 24 4
gpt4 key购买 nike

我在对象( session 、人员)之间有 m:n 关系,因为许多人可以参加许多 session 。

我是这样设置的

session

    @ManyToMany(mappedBy = "meetings")
protected Set<Person> participants = new HashSet<Person>();

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "person_meeting",
joinColumns = {@JoinColumn(name = "person_id")},
inverseJoinColumns = {@JoinColumn(name = "meeting_id")}
)
protected Set<Meeting> meetings = new HashSet<Meeting>();

Id DB hibernate为我创建了表meeting_participants,其中包含两个字段:meeting_id、person_id。很酷,正如我所愿。现在有问题的案例。我已经创建了 session 对象并将其保存到数据库中。比我创建一组用户,我将其添加到 session

this.saveMeeting.setParticipants(set);

hibernate 显示:

Hibernate: update Meeting set duration=?, meetingDate=?, room=? where meeting_id=?

没有添加任何内容到关联中。我需要改变什么?

//编辑我更改了该字段的 session 定义

@ManyToMany(mappedBy = "meetings", cascade = {CascadeType.ALL})
protected Set<Person> participants = new HashSet<Person>();

现在我收到错误

org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions

就是这个方法

public static Long add(Meeting meeting) {
SessionFactory sf = null;
Session session = null;

sf = HibernateUtil.getSessionFactory();
session = sf.openSession();

session.beginTransaction();
try{
session.save(meeting);
session.getTransaction().commit();
session.flush();
} catch(HibernateException e){
session.getTransaction().rollback();
e.printStackTrace();
return new Long(-1);
}
session.close();

return meeting.getId();
}

导致问题的行是:

session.save( session );​​

编辑

好的,我已经正确关闭了 session 。一切正常,但只有当我创建新对象时。当我想更新关联时它不起作用。所以问题是。如何更新关联?

最佳答案

这个问题每两天就会有人问一次。您刚刚初始化了关联的一侧,并选择了 Hibernate 忽略的一侧。双向关联具有所有者端和反向端。 Hibernate 仅考虑所有者方。 所有者一侧具有mappedBy属性。

所以你需要初始化关联的另一端:

for (Participant p : set) {
p.getMeetings().add(saveMeeting);
}

关于java - Hibernate 不向关联添加记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038698/

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