Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java QueryDSL-删除多个关联_Java_Hibernate_Jpa_Jpa 2.0_Querydsl - Fatal编程技术网

Java QueryDSL-删除多个关联

Java QueryDSL-删除多个关联,java,hibernate,jpa,jpa-2.0,querydsl,Java,Hibernate,Jpa,Jpa 2.0,Querydsl,为了找出一种更好的方法从多对多关联的列表中删除元素,我花了一天的时间 例如: @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,

为了找出一种更好的方法从多对多关联的列表中删除元素,我花了一天的时间

例如:

@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;
}
@实体
公共A类{
私人长id;
@许多
@可接合
私人名单b;
}
@实体
公共B级{
私人长id;
}
/*
*这很有效。
*/
公共布尔删除B(长期援助、长期投标)
{
A=getRepository().findOne(aId);
(B:a.B){
如果(b.id.equals(bId))
{
返回a.b.删除(b);
}
}
返回false;
}
/*
*此操作失败:“无法在FROM子句中为更新指定目标表“a”
*/
公共布尔删除B(长期援助、长期投标)
{
QA=QA.a;
返回getQueryFactory()
.删除(qa)
其中(qa.id.eq(辅助)和(qa.b.any().id.eq(投标)))
.execute()>0;
}
第一种方法removeB可以工作,但是它使用一种普通的方法来删除关联,这会导致太多的处理

我想用QueryDSL

谢谢大家!