Hibernate报错问题解决

本文介绍了一种在使用Hibernate框架时遇到的org.hibernate.TypeMismatchException异常,并提供了具体的解决方案。问题出现在使用getSession().get()方法查询时传入了错误类型的参数。文章给出了正确的查询方式,即使用createQuery方法。

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

org.hibernate.TypeMismatchException: Provided id of the wrong type for class

原文出处
在使用Atomikos写demo的时候,用spring整合hibernate写一个查询,报错:org.hibernate.TypeMismatchException: Provided id of the wrong type for class aniyo.jta.atomikos.domain.BankAccount. Expected: class java.lang.Integer, got class java.lang.String
方法如下:
Java代码 收藏代码
@Override
public BankAccount getByUsername(String username) {
return (BankAccount) this.getSession().get(BankAccount.class, username);
}

因为没怎么用过hibernate,很多东西也不熟悉,到网上查了一下相关资料,后面才发现,this.getSession().get()方法,是通过id来查询的,所以这里会报错说,提供id类型错误,我这里传的是一个String的username,所以这里要通过username查询,可能过createQuery来查;最后修改如下:
Java代码 收藏代码
@Override
@SuppressWarnings(“unchecked”)
public BankAccount getByUserName(String username) {
List list = this.getSession().createQuery(
“select t from BankAccount t where t.username=:userName”)
.setParameter(“userName”, username).list();
return list.isEmpty() ? null : list.get(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值