在hibernate中保存@ManyToMany关系的反向所有者

时间:2013-06-23 18:05:58

标签: hibernate many-to-many save

我使用User和Answer之间的多对多关系。答案是所有者:

@ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "user_answer", joinColumns = { @JoinColumn(name = "answer_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) })
    public Set<User> getUsers() {
        return users;
    }

用户是反向所有者:

@ManyToMany(mappedBy = "users", fetch = FetchType.LAZY, targetEntity = Answer.class)
    public Set<Answer> getAnswers() {
        return answers;
    }

保存所有者的代码回答并使用新记录连接表user_answer是可以的! 这是保存反向所有者的代码

User user=createUser();
//answer with id 6 is already in db
Answer answer = new Answer(6);
answer.getUsers().add(user);
user.getAnswers().add(answer);
currentSession().save(user);

如果用户没有将相应的行保存到user_answer中,则无法正常工作。用户实体的主键在保存时由db自动生成。

保存反向所有者用户时,连接表未填充新行的原因是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案明确指出了休眠引用here

那就是我需要首先保存逆主人,然后保存所有者:

currentSession().save(inverseOwner);
currentSession().save(owner);

然后连接表将填充相应的值