在努力寻找一种更好的方法从多对多关联中的List中删除元素时,我们度过了艰难的一天。
示例:
@Entity
public class A {
private Long id;
@ManyToMany
@JoinTable
private List<B> b;
}
@Entity
public class B {
private Long id;
}
/*
* This works.
*/
public boolean removeB(long aId, long bId)
{
A a = getRepository().findOne(aId);
for (B b : a.b) {
if(b.id.equals(bId))
{
return a.b.remove(b);
}
}
return false;
}
/*
* This fails: "You can't specify target table 'a' for update in FROM clause"
*/
public boolean removeB(long aId, long bId)
{
QA qa = QA.a;
return getQueryFactory()
.delete(qa)
.where(qa.id.eq(aId).and(qa.b.any().id.eq(bId)))
.execute() > 0;
}
第一种方法removeB可以工作,但是它采用了一种删除关联的香草方式,导致处理过多。
我想使用QueryDSL
谢谢!