JPA nativeQuery 变量为null,存在bytea不存在:或者upper(bytea)不存在问题

本文讨论了在使用JPA进行数据库查询时遇到的空值问题,指出当参数为null时会导致查询异常。提出了解决方案,包括在Service层增强空值处理或采用Querydsl进行更灵活的查询构造,以确保程序的健壮性。通过示例展示了如何利用Querydsl避免因null值引发的错误,从而提高代码质量。

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

@Query(
		value = "select * from products where  "
			+ " case when :XXXXRegion is not null and :xxxxRegion!='' then upper(xxxx_region) =upper(:xxxxRegion) else 1=1 end "
			+ " and "
			+ " case when :xxxxModel is not null and :xxxxModel !='' then upper(xxxx_model) =upper(:xxxxModel) else 1=1 end "
			+ " and "
			+ " case when :systemPlatform is not null and :systemPlatform!=''  then upper(system_platform) =upper(:systemPlatform) else 1=1 end "
			+ " ORDER BY id ASC, effective_time desc", nativeQuery = true
	)
	fun findByRegionAndFastoneModelAndSystemPlatform(
		@Param("fastoneRegion")
		fastoneRegion: String?,
		@Param("fastoneModel") xxxxModel: String?,
		@Param("systemPlatform") systemPlatform: SystemPlatform?
	): List<Product>

如果代码是这样写的话,如果存在xxxxModel 传递进来的是null 就会直接报错,jpa的nativeQuery对于null值处理不了

可以service加强对null值的处理

或者

使用QUERYDSL 来做查询

	fun findVmByFastoneRegionAndSystemPlatformAndFastoneModelAndVendor(
		region: Region?,
		platform: SystemPlatform?,
		fastoneModel: String?,
		vendor: Vendor?
	): List<Product> {
		val product = QProduct.product
		val productTypeExpression = product.productType.eq(ProductType.VM)
		val regionExpression = region?.let { product.fastoneRegion.eq(region) }
		val fastoneModelExpression = fastoneModel?.let { product.fastoneModel.eq(fastoneModel) }
		val platformExpression = platform?.let { product.systemPlatform.eq(platform) }
		val vendorExpression = vendor?.let { product.vendor.eq(Vendor.AWS) }
		val buildExpression =
			productTypeExpression.and(regionExpression).and(fastoneModelExpression).and(platformExpression)
				.and(vendorExpression)
		return repository.findAll(buildExpression, product.id.asc(), product.effectiveTime.desc()).toList()
	}

避免因为null值造成程序出现错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值