当前位置: 首页 > 面试题库 >

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

郭乐意
2023-03-14
问题内容

我有通过方法提供的实体类。我试图弄清楚如何通过JPA JPQL或Criteria
API发出截断或从中删除。我认为条件api对于使用类更自然,而truncate是一种更快的操作,因此首选。到目前为止,这是我整理的内容,但不确定如何添加/更改。

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

注意:_entityClassreturn 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是不可能的。



 类似资料:
  • 问题内容: 我想从中删除数据的SQL数据库中有一个表?我想保留列。 例如,我的表有3列,即名称,年龄,日期。我不想删除这些,我只想删除数据。 我应该截断,删除还是删除? 问题答案: 不要删除-它将删除数据和定义。 如果删除-数据不见了,并且自动增量值从上一个值开始继续。 如果您截断-则就像您刚刚创建了表一样。无数据且所有计数器均已重置

  • 截断类将删除定义为类的一部分的所有簇的记录。 在OrientDB中,每个类都有一个具有相同名称的关联群集。 如果还想从类层次结构中删除所有记录,则需要使用关键字。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义要截断的类。 - 定义命令是否也截断层次结构。 - 定义命令在顶点或边界类上强制截断。 示例 以下查询截断类。 如果上述查询成功执行,您将得到以下输出。

  • 本文向大家介绍如何从给定问题中识别实体,包括了如何从给定问题中识别实体的使用技巧和注意事项,需要的朋友参考一下 DBMS中的实体可以是存在的现实对象。要从给定问题中识别实体,请遵循以下给定提示- 在问题描述下,尝试找到实体。 搜索名词,例如Teacher,Doctor等等。 对名词进行分类,以获得有关实体的更广泛的描述。 反复阅读问题描述。 实体就像人,学生,老师,课程。 实体具有描述该属性的属性

  • 问题内容: 有什么方法可以将列表截断(例如到前100个元素),然后丢弃其他列表(无需遍历单个元素)? 问题答案: 用途: 您应该牢记返回项目的视图,因此,如果您希望列表的其余部分有资格进行垃圾回收,则应将想要的项目复制到新的项目: 如果列表短于指定的大小,则应超出范围例外。选择所需大小的最小值和列表的当前大小作为结束索引。 最后,请注意,第二个参数应比上一个所需的索引大一个。

  • 问题内容: 这个问题已经在这里有了答案 : SQL中的TRUNCATE和DELETE有什么区别 (32个答案) TRUNCATE vs DELETE FROM的利弊 (11个答案) 6年前关闭。 关于mysql / sqlserver,我的脑海里发生了一件事,即 删除/截断 哪个更好更快? 在哪里使用删除? 在哪里使用截断? 问题答案: 删除 DELETE是DML命令。 使用行锁执行DELETE语