QueryDSL - 删除ManyToMany关联

时间:2016-08-27 00:23:30

标签: java hibernate jpa jpa-2.0 querydsl

在努力寻找一种更好的方法从多对多关联中的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

谢谢!

0 个答案:

没有答案
相关问题