Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate@ManyToMany在只修改一个关系时删除/重新添加所有关系_Hibernate - Fatal编程技术网

Hibernate@ManyToMany在只修改一个关系时删除/重新添加所有关系

Hibernate@ManyToMany在只修改一个关系时删除/重新添加所有关系,hibernate,Hibernate,我注意到Hibernate在处理很多关系时表现得不太理想。。。这会引起问题,因为我的关系表也有最后更新的时间戳(由MySQL自动维护),但Hibernate删除/插入太多,破坏了我的时间戳 我的设置: A和B之间的多对多关系 数据库包含与10个B(id从1到10)相关的A(id=1) 当我删除A(id=1)和B(id=10)之间的一个关系时,Hibernate执行以下操作: 删除A(id=1)和B之间的所有关系 插入从A(id=1)到B(id从1到9)的关系 我希望发生的是: 只需删除

我注意到Hibernate在处理很多关系时表现得不太理想。。。这会引起问题,因为我的关系表也有最后更新的时间戳(由MySQL自动维护),但Hibernate删除/插入太多,破坏了我的时间戳

我的设置:

  • A和B之间的多对多关系
  • 数据库包含与10个B(id从1到10)相关的A(id=1)
当我删除A(id=1)和B(id=10)之间的一个关系时,Hibernate执行以下操作:

  • 删除A(id=1)和B之间的所有关系
  • 插入从A(id=1)到B(id从1到9)的关系
我希望发生的是:

  • 只需删除A(id=1)和B(id=10)之间的关系
这可以用Hibernate完成吗

以下是实体:

@Entity
public class A {
    @Id @GeneratedValue
    private int id;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name="a_b_ref")
    private List<B> b;
    ...
}

@Entity
public class B {
    @Id @GeneratedValue
    private int id;
    @ManyToMany(fetch = FetchType.LAZY, mappedBy="b")
    private List<A> a;
    ...
}
而我想要的是:

delete from a_b_ref where a_id=? and b_id=?

请发布完整的实体映射(单向或双向多对多、级联类型、即时或延迟加载等)和相关代码部分(是否设置对新集合的引用或从持久集合中删除,是否在同一会话或不同会话中加载、删除和保存等)。双向m2m,延迟加载。附上更多细节。
delete from a_b_ref where a_id=?
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
insert into a_b_ref (a_id, b_id) values (?, ?)
delete from a_b_ref where a_id=? and b_id=?