0

我在用户和答案之间使用多对多关系。答案是所有者:

@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 自动生成。

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

谢谢!

4

1 回答 1

0

解决方案在休眠参考here中明确指出

那就是我需要先保存反向所有者,然后再保存所有者:

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

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

于 2013-06-24T13:08:33.393 回答