【发布时间】:2013-04-25 06:56:54
【问题描述】:
我正在使用 spring-data-mongodb 1.2.0 和 QueryDSL 2.9.0。
为什么QueryDslPredicateExecutor 没有delete(Predicate predicate) 方法?
有解决办法吗?
【问题讨论】:
标签: spring-data querydsl spring-data-mongodb
我正在使用 spring-data-mongodb 1.2.0 和 QueryDSL 2.9.0。
为什么QueryDslPredicateExecutor 没有delete(Predicate predicate) 方法?
有解决办法吗?
【问题讨论】:
标签: spring-data querydsl spring-data-mongodb
我能够通过以下方式执行此操作:
@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();
}
【讨论】:
使用 JPADeleteClause,将以下两个参数传递给它: entityManager 和 EntityPath QClass
QPersonEntity path = QPersonEntity.personEntity;
JPADeleteClause deleteClause = new JPADeleteClause(getEntityManager(), path);
deleteClause.where(path.name.eq("behrooz")).execute();
【讨论】:
你可能能做的就是这个。使用“where”条件的谓词,查询对象,然后将其传递给删除方法
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 人员确认的
【讨论】: