【发布时间】:2025-12-19 07:10:10
【问题描述】:
我想知道执行涉及获取和删除多个实体对象的操作的首选/正确方法是什么?
这是一个例子:
这里是使用IN操作符的方式:
@Override
public void delete(Iterable<Long> ids) {
startTransaction();
Query query = getEntityManager().createNamedQuery(Entity.DELETE_ALL_BY_IDS_NQ);
query.setParameter(Entity.DELETE_ALL_BY_IDS_PARAMS[0], ids);
query.executeUpdate();
endTransaction();
closeTransaction();
}
命名查询如下所示:
@NamedQuery(
name = "Entity.deleteAllByIds",
query = "DELETE from Entity e WHERE e.id IN :ids"
)
这就是通过EntityManager#remove实现它的方式
public void delete(Iterable<Long> ids) {
int count = 0;
startTransaction();
for (Long id : ids) {
count++;
Query query = getEntityManager().createNamedQuery(ImeiTacEntity.IMEITAC_READ_BY_ID_NQ);
query.setParameter(ImeiTacEntity.IMEITAC_READ_BY_ID_PARAMS[0], id);
ImeiTacEntity entity = (ImeiTacEntity) query.getSingleResult();
getEntityManager().remove(entity);
if ((count % BATCH_THRESHOLD) == 0) {
endTransaction();
clearTransaction();
startTransaction();
}
}
endTransaction();
closeTransaction();
}
读取查询是这样的:
@NamedQuery(
name = "Entity.readById",
query = "SELECT e from Entity e WHERE e.id = :id"
)
【问题讨论】:
标签: java jpa orm persistence crud