9

我正在使用带有 QueryDSL 2.9.0 的 spring-data-mongodb 1.2.0。

为什么没有QueryDslPredicateExecutor方法delete(Predicate predicate)

有解决方法吗?

4

3 回答 3

4

你大概能做的就是这个。使用“where”条件的谓词,查询对象,然后将其传递给 delete 方法

QMyObj obj= new QMyObj("myObj");
Iterable<MyObj> myObjs = myObjRepository.findAll(obj.property.eq("property"));
myObjRepository.delete(myObjs);

在这里,我首先创建 Q 类的实例,然后根据谓词查找所有对象。然后调用存储库的void delete(Iterable<? extends T> entities)方法。

可能是因为他们没有提供这种解决方法,但这是由 Spring Source 人员确认的

于 2013-06-27T18:01:30.580 回答
0

我能够通过以下方式执行此操作:

    @Autowired
    LocalContainerEntityManagerFactoryBean emFactory;
    
    EntityManager em;
    
    @PostConstruct
    private void setup(){
    em = emFactory.getObject().createEntityManager();
    }
    
        @Transactional private voide deleteByPredicate(Predicate predicate) { 
JPADeleteClause deleteClause = new JPADeleteClause(em, QPersonEntity.personEntity);
    em.joinTransaction();
    deleteClause.where(predicate).execute(); 
    }
于 2021-08-26T11:53:53.187 回答
-1

使用 JPADeleteClause,将以下两个参数传递给它: entityManagerEntityPath QClass

QPersonEntity path = QPersonEntity.personEntity;
JPADeleteClause deleteClause = new JPADeleteClause(getEntityManager(), path);
deleteClause.where(path.name.eq("behrooz")).execute();
于 2019-07-30T08:04:49.217 回答