我使用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自动生成。
保存反向所有者用户时,连接表未填充新行的原因是什么?
谢谢!
答案 0 :(得分:0)
解决方案明确指出了休眠引用here
那就是我需要首先保存逆主人,然后保存所有者:
currentSession().save(inverseOwner);
currentSession().save(owner);
然后连接表将填充相应的值