java - 在 hibernate 中更新父对象时多对多关系出现问题?

标签 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;
    }

我在 transient 主题实例中更新集合“votingUsers”,然后调用 hibernate session 的更新方法。我不使用 setVotingUsers 方法,而是通过 votingUsers.clear() 方法清除 VotingUsers 集合,然后通过 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而不是删除和插入?

谢谢!

最佳答案

我认为这是 hibernate 行为的正常方式。因此,您对此无能为力,如果关系和参数正确,为什么还要麻烦呢?

关于java - 在 hibernate 中更新父对象时多对多关系出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192191/

相关文章:

java - 无法从 Spring Boot 连接到 postgresql 架构 - 'org.postgresql.util.PLSQLException: ERROR: schema "测试“不存在”

entity-framework - 不确定如何映射多对多关系 - 重用不同实体的映射表

database - 数据库设计 : efficiency consideration when adding an intermediate class into a Many-Many relationship

java - 在 Java 中设置 EditText 行和位置?

java - spring boot 中的自定义 jpa 验证

java - 代理模式的正则表达式

mysql - 使用 Codeigniter 和 MySQL 处理多对多关系的最佳方式?

javascript - Thymeleaf + jQuery,如何正确添加 th :field ="*{value}"

hibernate - 事务方法中的显式 flush() 是否会更新数据库

java - Hibernate二级缓存(TreeCache)——用于子实体