一) in (List<Long>)
@Modifying
@Query("DELETE FROM Height h WHERE h.user.id = ?1 AND h.id in (?2)")
public void deleteHeightInBatchByUserIdAndIdIn(Long uid, List<Long> hids);
二) in(Long[])原生的 JPA可以如下:
public List<FamilyMember> findByFamilyIdAndUserIdIn(Long fid, Long[] uids);
代码试验一(成功):
Long[] adArray = new Long[ads.size()];
for (int i = 0; i < ads.size(); i++) {
adArray[i] = ads.get(i).getId();
}
timePushDao.findByIdIn(adArray);
public List<TimePush> findByIdIn(Long[] adIds);
代码试验二(没成功,估计是不能用@Query("")的形式。)
Long[] adArray = new Long[ads.size()];
for (int i = 0; i < ads.size(); i++) {
adArray[i] = ads.get(i).getId();
}
@Modifying (有这句或者没这句都不行)
@Query("select t from TimePush t where t.ad.id in ?1 and t.pushTime>?2 and t.pushTime <?3 ")
public List<TimePush> findPageByTimePush2(Long[] adIds, Calendar startTime, Calendar endTime);
三)in (select)
@Query("SELECT t FROM Tweet t where t.user.id IN " +
"(SELECT fm1.user.id FROM FamilyMember fm1 where fm1.family.id IN " +
"(SELECT fm2.family.id FROM FamilyMember fm2 where fm2.user.id = ?1)) " +
"AND t.id < ?2")
public Page<Tweet> findFamiliesTweetsByIdLessThan(Long uid, Long tid, Pageable page);
代码试验一(没有成功,很困惑;把Ad改成全路径也不行。)
@Query("select t from TimePush t where t.ad.id in (select a.id form Ad a where a.title like ?1 and a.keyWord like ?2) ")
public List<TimePush> findPageByTimePush3(String title, String keyWord);
上面代码没有成功,换了以下方案,这个方案也更好,其实不需要用in。
public List<TimePush> findByAdTitleLikeAndAdKeyWordLike(String title, String keyWord);
四)拼装String,即“2,3,4” 这种怀疑不行
@Query(nativeQuery = true,
value = "select * from t_serve_area where addr_id in (?1) and manager_type = ?2 group by manager_id")
public List<ServeArea> findDistinctManagerIdByIdsAndManagerType(String ids, Integer manager_type);
五.注意
1)JPA 原生的那种sql,不可以用String startTime去比较数据库中的Calendar startTime。
而@Query(nativeQuery = true,sql="你的sql语句")这种可以。
2)
Page<TimePush>的形式好像不能用@Query(
nativeQuery = true,sql="你的sql语句")的语句,能用@Query("select t from TimePush t where t.ad in (?1) and t.pushTime>?2 and t.pushTime <?3 ")
3)
| in (List) | in (Array) | in (select) |
JPA(不需要写sql) | ok | ok | -- |
原生sql | ok | 不行 | 不行 |
nativeQuery sql | ok | 未试验 | 未试验 |
分享到:
相关推荐
在 JPA 中,我们可以使用 @Query 注解来定义查询语句。在查询语句中,我们可以使用 Limit 条件来限制查询结果的数量。例如,我们可以使用以下方式来定义查询语句: ```java @Query("SELECT m FROM Misaka m WHERE m...
或者在`IN`语句中设置参数: ```sql o.country IN ('UK', 'US', 'France', :country) ``` - **子查询**:可以在查询内部嵌套另一个查询,如: ```sql SELECT c FROM Customer c WHERE (SELECT COUNT(o) FROM ...
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。JPA 提供了一种面向对象的方式来查询数据,使得开发者无需直接编写SQL,而是使用更直观、面向对象的查询语言,这被称为JPQL...
- 封装:DAO类应封装具体的SQL查询和HQL(Hibernate Query Language)语句,避免在业务层暴露这些细节。 - 单一职责:每个DAO类应只负责一种类型的数据操作,如用户DAO只处理用户相关的操作。 - 可复用:设计通用的...
### HQL的几种常见写法 #### 概述 HQL(Hibernate Query Language)是Hibernate框架提供的一种查询语言,它支持面向对象的语法结构,并且能够很好地与Java对象模型进行映射。通过HQL,开发者可以更加灵活地操作...
2. **数据库查询**:Servlet使用Java Persistence API (JPA) 或者 JDBC 连接到数据库,执行SQL查询,通常是一个带有LIMIT和OFFSET子句的SELECT语句,LIMIT用于指定每页的记录数,OFFSET用于跳过前几条记录,达到分页...
Spring Data 的主要优势在于极大简化了 JPA 的写法,开发者可以在几乎不编写具体实现的情况下实现对数据的访问和操作。 #### 二、Spring Data JPA与本地事务管理 在单一数据库环境中,通常采用本地事务管理。当...
在Java应用程序中,JDBC(Java Database Connectivity)是用于与各种数据库交互的一套标准接口和类库,提供了统一的方法来处理SQL语句,进行数据查询和更新。本资料包可能包含了深入讲解Java JDBC高级特性和实践技巧...
通过JPA进行操作时,当尝试保存的BigDecimal值超过定义的范围,如超过9位整数,将抛出异常;如果小数部分超过2位,多余的位数会被四舍五入截断。 总结来说,MySQL的DECIMAL类型是处理精确数值的理想选择,尤其是在...
- 声明 Scanner 对象:`Scanner input = new Scanner(System.in);` - 获取用户输入: - `String x = input.next();`:获取字符串。 - `int y = input.nextInt();`:获取整数。 - `double z = input.nextDouble...
JPA 2.0为了弥补JPA1.0的不足,才将这种Query的思想引入为框架中的另一套查询体系——Criteria API。事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过...
- **JPA (Java Persistence API)**:这是一个官方定义的ORM标准,被广泛应用于企业级应用中。 - **EJB (Enterprise JavaBeans)**:虽然最初设计时并非专门针对ORM,但其第三版(EJB 3.0)引入了对ORM的支持。 - **...
具体表现为在执行查询时抛出了`SQLGrammarException`,提示为`ORA-00907: 缺失右括号`,这通常意味着SQL语句中的语法错误,可能是括号没有正确配对。 首先,让我们深入理解问题的根源。Hibernate是Java平台上的一个...
7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...
文件内容中存在OCR扫描错误,例如"packageAction"应理解为Java包命名的上下文,"nextval"和"currval"是数据库中序列的相关操作,"filter-class"的正确写法应为"filter-class","requestDispatcher"和"forward"的使用...
- 支持CGLIB和JPA规范,兼容性好。 总结起来,Hibernate作为Java ORM框架,通过简化数据库操作、提供对象化的查询方式,极大地提升了开发效率,同时也提供了丰富的特性以适应各种复杂的数据库应用场景。通过学习...
9. enableMethodAnnotation:可以控制是否支持方法上的JPA注解,默认false 通用Mapper是一个非常实用的工具,可以极大地提高开发效率和减少维护成本。但是,需要注意的是,通用Mapper只支持对单表的操作,对单表的...
本篇文章将详细介绍如何利用`Example`类实现对MySQL数据库中多个字段的模糊查询,以及与之相对的直接编写SQL语句的方式。 首先,`Example`类是MyBatis Generator自动生成的,它基于数据库表结构,提供了一种面向...