you might want to do the following highlighted code as:
whereClause.append("f.id IN (:fleetIdsList)");
.....
query.setParameter("fleetIdsList", fleetIdsList);
But it only works for JPQL not for Native queries, since JPA native query does not support setting list parameters
-----------------------
StringBuilder query = new StringBuilder();
query.append("select count(distinct m.id) ");
query.append("from ");
query.append("central.machine m ");
query.append("join central.organisation_has_machines ohm on ohm.machine_id = m.id and ohm.end_date is null ");
query.append("join central.fleet_has_machines fhm on fhm.machine_id=m.id ");
query.append("join central.organisation o on ohm.organisation_id = o.id ");
query.append("join central.fleet f on fhm.fleet_id = f.id ");
if(userId != null) {
query.append("join central.user_has_fleets uhf on uhf.fleet_id=f.id ");
}
query.append("join central.ebox eb on eb.current_machine_id = m.id ");
query.append("join (select distinct omhs.organisation_machine_id from central.service_feature sf, central.service_plan_has_feature sphf, central.service_plan sp, central.organisation_machine_has_services omhs where sf.name in ('AVL', 'CURRENT_LOCATION') and sphf.service_feature_id = sf.id and sp.id = sphf.service_plan_id and omhs.service_id = sp.id) allowed_service on allowed_service.organisation_machine_id = ohm.id ");
query.append("left join central.sensor_board sb on sb.ebox_id = eb.id ");
query.append("left join central.ebox_status ebs on eb.ebox_status_id=ebs.id ");
query.append("left join central.machine_latest_event_cache le on le.machine_id=m.id ");
query.append("where ");
if(!criteria.getFleetIds().isEmpty()) {
if(log.isDebugEnabled()) {
log.debug("Count query. New impl takes precedence: criteria.getFleetIdList()=" + criteria.getFleetIds());
}
query.append("f.id in (");
List<Long> fleetIdList = criteria.getFleetIds();
int index = 0;
for(Long fleetId : fleetIdList) {
query.append(":fleetId").append(fleetId);
if(++index < fleetIdList.size()) {
query.append(",");
}
}
query.append(")");
query.append(" and ");
}
else if(criteria.getFleetId()!=null){
if(log.isDebugEnabled()) {
log.debug("Count query. Existing impl: criteria.getFleetId()=" + criteria.getFleetId());
}
query.append("f.id = ");
query.append(":fleetId");
query.append(" and ");
}
if(userId != null) {
query.append("uhf.user_id = ");
query.append(":userId");
query.append(" and ");
}
if(!StringUtils.isEmpty(criteria.getSearchString())) {
query.append("(lower(ohm.display_name) like :display_name");
query.append(" or ");
query.append("lower(ohm.registration_plate) like :registration_plate ");
query.append(") and ");
}
if(criteria.getMachineType()!=null) {
query.append("m.machine_type = :machine_type ");
}
List<String> excludeMacTypes = this.getExcludeMacTypeList(criteria);
if(excludeMacTypes != null && !excludeMacTypes.isEmpty()) {
query.append("m.machine_type not in (");
query.append(":machine_types_to_exclude");
query.append(") and ");
}
if(StringUtils.isNotBlank(criteria.getOrganisationCommonId())){
query.append("o.common_identifier = :orgCommonId ");
} else {
query.append("true ");
}
if(log.isDebugEnabled()){
log.debug("countMachineViewForCriteria Native SQL: "+query.toString());
}
Query q = em.createNativeQuery(query.toString());
相关推荐
SpringDataJpa 动态复杂查询NativeQuery emm挺长时间没更新了,最近在忙项目,外加搬家,后续会继续更新 遇到一个复杂的sql查询,在不通过外键关联的情况下,只能选择使用原生sql的方式查询,但是遇到一个极其XX的...
Jpa详细查询实例介绍,教你如何使用JPA,简单,分类实例。
JPA @Query 注解中使用 Limit 条件详解 在 Java 持久层 API(JPA)中使用 @Query 注解时,需要注意 Limit 条件的使用。在本文中,我们将详细介绍如何在 JPA 的 @Query 注解中使用 Limit 条件。 Limit 条件的使用 ...
然而,在JPA 2.0中,使用entityManager.createNativeQuery()执行原生的SQL语句时,query.getResultList()返回的是一个List[]>,每行数据被作为一个对象数组返回。这使得代码不容易让人理解,且不灵活。因此,本文将...
在Java Persistence API (JPA)中,`@Query`注解是用于自定义查询的一种方式,它可以让我们在Repository接口中直接编写SQL或者HQL(Hibernate Query Language)来执行数据库操作。在本例中,我们将详细探讨如何使用`@...
Spring Data JPA 使用 @Query 注解 Spring Data JPA 是一个基于 Java Persistence API(JPA)的数据访问技术,它提供了一种简洁的方式来访问数据库。在 Spring Data JPA 中,我们可以使用 @Query 注解来定义查询...
4. **查询(Query)**: JPA提供了两种查询方式:JPQL(Java Persistence Query Language)和 Criteria API。JPQL是一种面向对象的查询语言,类似SQL,但操作的是实体而不是数据库表。Criteria API则提供了一个更强大...
扩展MyBatis JPA支持,简化CUID操作,增强SELECT分页查询。MyBatis JPA Extra对MyBatis扩展JPA功能:Jakarta JPA 3注释简化CUID操作;Interceptor实现数据库SELECT分页查询;链式Query查询条件构造器;提供starter,简化...
JPA 使用@Query注解实现JPQL和本地自定义查询 JPA API 条件查询 (子查询,多表连接查询) JPA结合QueryDSL轻松完成复杂查询(自连接,多表连接查询) 参与文档: Pro JPA2中文版:精通Java持久化API 优秀博文读书笔记: ...
时间宝贵,为了节约用者时间,该资源中包括4张已经建好的表:employee/department/phone/project/中间表,只需要下载添加至mysql数据库即可用
This tutorial show how to use Hibernate/JPA Named Queries. We start by explaining why we would use named queries. Next, we show an example of how to use named queries, either with annotations or XML ...
JPA 实体模型的 GraphQL 查询 Api GraphQL JPA 查询库使用 JPA 2.1 规范为您的 JPA 实体 Java 类使用 GraphQL Java 派生和构建 GraphQL API。 它提供了一个强大的 JPA 查询架构生成器,以使用 JPA EntityManager Api...
在JPA中,@Query注解允许开发者编写自定义的SQL或者HQL(Hibernate Query Language)来执行复杂的查询操作。本篇工作笔记将深入探讨如何在JPA中使用@Query进行分页查询,并通过一个实例来展示其具体应用。 首先,...
在处理复杂查询时,我们可以利用Spring Data JPA中的`@Query`注解来编写自定义SQL或者HQL(Hibernate Query Language)语句。本篇文章将深入探讨如何在`@Query`中使用对象参数进行INSERT操作。 首先,让我们理解...
JPA提供了自己的查询语言——Java Persistence Query Language(JPQL),类似于SQL,但更面向对象。例如,以下JPQL查询返回所有用户: ```java String query = "SELECT u FROM User u"; List<User> users = em....
9. **JPA Querydsl Support**:Spring Data JPA 还支持 Querydsl,这是一个强大的类型安全的查询语言,它可以进一步提高查询的可读性和可维护性。 10. **Elasticsearch 集成**:虽然不是 Spring Data JPA 的核心...
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它简化了在Java应用程序中存储、检索和管理数据的过程,是Enterprise JavaBeans(EJB)的一部分,也是Spring框架中的一个...
Hibernate JPA提供了JPA规范的全部功能,并且在JPA的基础上扩展了一些特性,如更强大的 Criteria 查询、HQL(Hibernate Query Language)等。Hibernate JPA因其灵活性和广泛社区支持而受到欢迎,尤其是在处理复杂...
@Query(value = "INSERT INTO t_student(seq, name, sex) VALUES (getseq('student_seq'), :#{#student.name}, :#{#student.sex})", nativeQuery = true) int insert(@Param("student") StudentDO student); ``` ...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象的工作。JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)...