="acronym">API提供的方法--executeUpdate(),来执行更新或是删除操作。如果你使用getResultList()或getSingleResult(),持久化实现会抛出一个IllegalStateException 异常。同样,你用executeUpdate()来执行一个SELECT查询,持久化实现会抛出一个IllegalStateException 异常。
下面是一些批量更新的例子。
一个论坛帖子数量的两倍。
Query q2 = em.createQuery("UPDATE Forum AS f "+"SET f.forumPostCount = f.forumPostCount * 2");q2.executeUpdate(); 将所有的Role实体的dateUpdated字段设置为当前日期和时间。
Query q = em.createQuery("UPDATE Role AS r " +"SET r.dateUpdated = CURRENT_TIMESTAMP");q.executeUpdate(); 将布尔字(pruningEnabled))段值设置为true。在agoraBB应用程序中,用EntityListener类来设置dateUpdated和updatedByUser字段。version字段是由持久化实现进行管理。避开这些弯弯角角,当你执行批量操作时,你的查询写成更新字段。还有,要注意的是,executeUpdate返回实体更新的数目(删除时返回删除的数量)。
// Assume we already fetched the correct User identified by// the variable adminUserQuery forumUpdate = em.createQuery("UPDATE Forum AS f " +"SET f.pruningEnabled = TRUE, f.dateUpdated = CURRENT_TIMESTAMP, " +"f.version = f.version + 1, f.updatedByUser = :user");forumUpdate.setParameter("user", adminUser);int entitiesUpdated = forumUpdate.executeUpdate(); 你可以将pruningEnabled的值设置为null,将其进行重位。如下所示。
Query pruningReset = em.createQuery("UPDATE Forum AS f " +"SET f.pruningEnabled = NULL");pruningReset.executeUpdate(); 这条查询设置了enum类型的字段值。你必须使用enum类的长限定词,因为enum不是实体,持久化实现不法获得Status的信息,但它可以识别com.sourcebeat.jpa.model.Status。
Query enumUpdate = em.createQuery("UPDATE Forum AS f " +"SET f.status = com.sourcebeat.jpa.model.Status.LOCKED " +"WHERE f.type = com.sourcebeat.jpa.model.FTPType.ANNONUCEMENT");int enumUpdateCount = enumUpdate.executeUpdate(); 这里有几个DELETE操作的例子。
删除系统中所有无密码的用户(Users)。
Query removeRoles = em.createQuery("DELETE FROM User u " +"WHERE u.password = NULL");int rolesRemoved = removeRoles.executeUpdate(); 删除没有主题(Topics)的论坛(Forum)。
Query removeForums = em.createQuery("DELETE FROM Forum f " +"WHERE f.topics IS EMPTY");int forumsRemoved = removeForums.executeUpdate();
总结(SUMMARY)
JPQL提供了大量实体查询,分组,排序和总结的功能。包括丰富的关联(join)操作支持和即时读取延迟关联关系(eagerly fetch lazy relationship)的能力。你已经学习所支持的各种函数和表达式,以及SELECT语句所能提供的各种选项。本章最后探讨了批量处理操作,它具备使用单条查询语句(实际是指UPDATE或DELETE语句)影响一个或多个实体的能力。
现在你应该很熟悉了JPQL所能提供的丰富的功能,利用它,从简单到复杂一步步地创建自己的查询。
分享到:
相关推荐
**JPA查询语言详解** Java Persistence API(JPA)是一种标准的Java库,用于管理和持久化Java对象到关系数据库。JPA提供了强大的查询语言——Java Persistence Query Language(JPQL),它允许开发者通过面向对象的...
**JPA查询语言(JPQL)**是Java Persistence API中的一个核心特性,它提供了一种面向对象的查询语言,用于在Java应用程序中检索和操作持久化实体。JPQL类似于SQL,但设计的目标是与对象模型更紧密地集成,而不是直接...
jpa查询详解 JPA(Java Persistence API)是一种 Java 持久层 API,用于处理 Java 对象和关系数据库之间的 Mapping。JPA 查询是 JPA 中的一种重要机制,用于从数据库中检索数据。在本文中,我们将详细介绍 JPA 查询...
JPQL是一种面向对象的查询语言,类似SQL,但操作的是实体而不是数据库表。Criteria API则提供了一个更强大且类型安全的查询构建方式。 5. **事务管理(Transaction)**: 在JPA中,事务是通过`EntityManager`进行...
**JPA规范**定义了应用程序与数据库交互的一组接口和API,包括实体(Entities)、实体管理器(EntityManager)、查询语言(JPQL)和 Criteria API 等核心概念。通过使用JPA,开发者可以将业务对象与数据库表进行映射...
JPA的官方文档详细介绍了JPA的规范和实现,包括其核心概念、配置、实体管理、查询语言、事务管理以及性能优化等方面。文档通常分为两部分:JSR(Java Specification Requests)文档和API文档。JSR文档定义了JPA的...
6. **JPA Query Language (JPQL)**:JPA提供了一种面向对象的查询语言,类似于SQL,但更关注于对象而非表格。JPQL允许开发者用Java类和属性来编写查询,而不是直接使用数据库表和列。 7. **Criteria API**:除了...
2. **查询语言(JPQL)**:Java Persistence Query Language,一种类似于SQL的语言,用于在JPA中执行查询操作。JPQL支持面向对象的语法,使得开发者能够用更自然的方式表达查询逻辑。 3. **元数据注解**:JPA使用...
TOPLink JPA提供了完整的JPA规范支持,包括实体管理、查询语言(JPQL)以及事务处理。TOPLink JPA的优势在于其高性能和对复杂数据模型的良好支持,同时也能够无缝集成到EclipseLink(Oracle的开源持久化框架)中,...
9. **JPA Querydsl Support**:Spring Data JPA 还支持 Querydsl,这是一个强大的类型安全的查询语言,它可以进一步提高查询的可读性和可维护性。 10. **Elasticsearch 集成**:虽然不是 Spring Data JPA 的核心...
**JPA查询语言(JPQL)** JPA提供了自己的查询语言——Java Persistence Query Language(JPQL),类似于SQL,但更面向对象。例如,以下JPQL查询返回所有用户: ```java String query = "SELECT u FROM User u"; ...
6. **查询语言**:JPQL和 Criteria 查询提供灵活的数据检索方式。 结合标签“工具”,我们可以想到JPA在实际开发中的应用场景,如Spring框架中的Spring Data JPA模块,它极大地简化了使用JPA的流程,提供了更多的...
标题“一个基于原生Java代码查询方式的JPA查询框架.zip”指的是一个使用Java Persistence API(JPA)的查询框架,该框架允许开发者使用原生的Java代码进行数据库查询,而不是依赖于HQL(Hibernate Query Language)...
JPA包括以下3方面的技术: RM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元...查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
此外,JPA还包括一个功能强大的查询语言,即JPQL(Java Persistence Query Language)。 2. 在Eclipse RCP中使用JPA时,通常需要处理应用的生命周期和依赖性管理。OSGi环境中的每个模块被称为一个“Bundle”,每个...
标题中提到的"JPA中文解释"是指对于JPA的概念、原理、使用方法等进行了中文语言的详细解读,这对于中文环境下的开发者来说非常方便,能够更好地理解和应用JPA。JPA的核心理念是对象关系映射(ORM),它将Java对象...
**JPA查询语言**,即JPQL(Java Persistence Query Language),是JPA提供的一个面向对象的查询语言,类似于SQL,但更加面向对象。JPQL用于从数据库检索或更新实体,支持复杂的查询结构,如选择、聚合、连接、子查询...
本节我们将深入探讨"李勇JPA快速入门05_jpa中的查询"这一主题,这涵盖了JPA查询机制的基础和核心概念。 1. **基本查询语言:JPQL** Java Persistence Query Language(JPQL)是JPA提供的面向对象的查询语言,类似...