获取强制转换异常的Hibernate query.list

时间:2014-04-04 13:10:24

标签: java hibernate sql-server-2012

我正在尝试通过hibernate连接到sql server 2012。

sql查询:SELECT top 3 P. ,v。 FROM TBLPOMASTER P在v.vendorid = p.VendorId上加入tblVendorMaster v,其中v.VendorCode = 10001和p .ApprovedStatus = 'Y'

我尝试将HQL查询翻译为

List<TblPomaster> poMasterList = new ArrayList<TblPomaster>();
            String sqlQuery = "from TblVendorMaster as  v, TblPomaster as p  where v.vendorId=p.vendorId and v.vendorCode=:vendorLoginId and p.approvedStatus='Y'";

            Query query = HibernateUtil.getSession().createQuery(sqlQuery)
                    .setParameter("vendorLoginId", vendorLoginId);
            query.setMaxResults(3);
            poMasterList=query.list();      

            return poMasterList;

在上面的代码查询中执行正常。但是query.list()抛出RuntimeException为 java.lang.String无法强制转换为java.lang.Long

上述错误的解决方案是什么

2 个答案:

答案 0 :(得分:1)

  1. 您可以将属性的类型从String更改为Long

  2. 您可以将值强制转换为long:

    Long.valueOf(String s).longValue();

  3. 还建议您使用以下命令获取查询结果:

    query.getResultList();
    

答案 1 :(得分:0)

看起来你正在从数据库中检索一个值,而hibernate正试图将其转换为Long值。

也许您已将此表列映射到模型类中的错误类型属性。我要检查哪些文字值是定义为&#39;数字&#39;在你班上。

- @theMarceloR:vendorCode数据类型在模型文件中为Long。但我发送vendorLoginId是一个字符串值。这是问题吗?

将模型配置中的属性从Long更改为String,看看会发生什么。

<强>解: Sagar更新了他的代码,现在他将vendorCode作为参数发送,该值从字符串转换为long。