在hibernate中更新父对象时多对多关系中的问题?

时间:2013-06-19 13:14:12

标签: java hibernate many-to-many

我在用户和主题表之间有多对多的关系。连接表是user_topic。 主题实体有:

@ManyToMany(fetch = FetchType.LAZY, targetEntity = IntermediateUser.class)
    @JoinTable(name = "user_topic", catalog = DataBaseConstants.DBCATALOG, joinColumns = { @JoinColumn(name = "topic_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) })
    @Cascade(value = CascadeType.DELETE)
    public Set<IntermediateUser> getVotingUsers() {
        return votingUsers;
    }

我在瞬态主题实例中更新集合'votingUsers',然后调用hibernate session的update方法。我不使用方法setVotingUsers,而是通过方法votingUsers.clear()清除voteUsers集合,然后按votingUsers.add(voter);添加 要更新我调用此方法:

sessionFactory.currentSession().update(topic);

结果我在日志中看到以下几行

DEBUG org.hibernate.SQL- update javahelpdb.topic set content=?, `PUBLISH_DATE`=?, rate=?, forum=?, title=?, user=?, viewquantity=? where topic_id=?
DEBUG org.hibernate.SQL- delete from javahelpdb.user_topic where topic_id=?
DEBUG org.hibernate.SQL- insert into javahelpdb.user_topic (topic_id, user_id) values (?, ?)

所有参数都是正确的。我希望只有一个查询:

update user_topic set topic_id=?, user_id=? where topic_id=?

如何指示hibernate更新user_topic而不是删除和插入?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这是hibernate行为的正常方式。所以你不能真正做任何事情,如果关系和参数是正确的,为什么要这么麻烦?