gpt4 book ai didi

java - 从给定的实体类中截断/删除

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:11 27 4
gpt4 key购买 nike

我的实体类可以通过方法使用。我试图弄清楚,如何通过 JPA JPQL 或 Criteria API 发出截断或删除。我认为 criteria API 对于处理类来说更自然,而 truncate 是一个更快的操作,所以这些是首选。到目前为止,这是我放在一起的,但不确定要添加/更改什么。

CriteriaBuilder cb = this._em().getCriteriaBuilder();
cb.createQuery( _entityClass() ).from( _entityClass() );

注意:_entityClass 返回 MyEntity.class,我没有对 MyEntity 的其他引用,这是一个更通用的实现。

最佳答案

假设 MyEntity 引用了您要删除的表,您可以按如下方式进行:

// Criteria API (JPA 2.1 and above)
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaDelete<MyEntity> query = builder.createCriteriaDelete(MyEntity.class);
query.from(MyEntity.class);
em.createQuery(query).executeUpdate();

或使用通用方法:

public <T> int deleteAllEntities(Class<T> entityType) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaDelete<T> query = builder.createCriteriaDelete(entityType);
query.from(entityType);
return em.createQuery(query).executeUpdate();
}


同样对于 JPQL/SQL 查询:

// JPQL
em.createQuery("DELETE FROM MyEntity e").executeUpdate();

// SQL
em.createNativeQuery("TRUNCATE TABLE MyEntity").executeUpdate();

或使用通用方法:

public static <T> int deleteAllEntities(Class<T> entityType) {
String query = new StringBuilder("DELETE FROM ")
.append(entityType.getSimpleName())
.append(" e")
.toString();
return em.createQuery(query).executeUpdate();
}

public static <T> int truncateTable(Class<T> entityType) {
String query = new StringBuilder("TRUNCATE TABLE ")
.append(entityType.getSimpleName())
.toString();
return em.createNativeQuery(query).executeUpdate();
}

对于 Criteria API,您只能使用 SELECT、UPDATE、DELETE 语句,因此无法使用 TRUNCATE。

关于java - 从给定的实体类中截断/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com