Hibernate中find()方法问题??这是为什么?

本文探讨了使用find()方法查询数据库时出现的DataIntegrityViolationException异常。当roleId字段包含非数字字符时,直接拼接字符串会导致异常。通过修改查询方式可以有效避免此问题。
摘要由CSDN通过智能技术生成

我在用find()方法查找的时候传递的是String类型,数据库字段类型roleId是varchar类型. 假如现在有
String id='0001';//实际上应该是从数据库中检索出id
find('  from GlobalRoleModel g where g.roleId='+id);
如果现在数据库中有N条记录 roleId字段在数据库存储的时候只有数字字符,没有其它任何字符.这样查询的时候没有任何错误.问题就出现在这里如果roleId字段有其他字符,就会抛出以下异常.如果此时把find()方法修改为
find('  from GlobalRoleModel g where g.roleId= ''+id+'''); 就不会抛出异常

org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not execute query; SQL [select globalrole0_.role_id as role1_, globalrole0_.role_name as role2_17_, globalrole0_.role_note as role3_17_ from Global_Role globalrole0_ where globalrole0_.role_id=0005]; ORA-01722: 无效数字
; nested exception is java.sql.SQLException: ORA-01722: 无效数字

Caused by:
java.sql.SQLException: ORA-01722: 无效数字

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值