jpa @Query使用SQL语句因参数类型踩过的坑

本文介绍了在使用JPA的@Query注解时,如何处理SQL语句中的参数类型问题。通过两个示例展示了当字段类型为枚举时,原生SQL查询需要使用枚举的ordinal()方法获取int值,而HQL查询可以直接使用枚举对象。错误地使用参数类型可能导致查询失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体类
public class CapitalFlow implements Serializable {

@Column(length = 40)
String subAccount;
/**
 * 处理进度
 */
Stage stage;

@CreatedDate
LocalDate billDate;

@CreatedDate
LocalDateTime createAt;

}

枚举类型定义
public enum Stage {

/**
 * 0.未知,未开始
 */
UNKNOWN,

/**
 * 1.处理中
 */
PROCESSING,

/**
 * 2.成功
 */
SUCCESS,

/**
 * 3.失败
 */
FAILURE,

/**
 * 4.完成,结束
 */
FINISHED,
}

sql的两种写法
1)第一种用原生sql
@Query(value = "select * from capital_flow where sub_account=?1 and stage=?2 and bill_date like CONCAT(?3,’%’) ORDER BY create_at DESC ",nativeQuery = true)
List findBySubAccountAndStageAndBillDateLikeOrderByCreateAtDesc(String subAccount,int stage,String billDate);

因为数据库stage这个字段的类型是int,所以用原生sql的时候,类型参数要是int类型,Stage.SUCCESS.ordinal()取数字值。

2)第二种用对象HQL
@Query(value = “select c from CapitalFlow c where c.subAccount=?1 and c.stage=?2 and

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值