Hibernate:java.lang.ClassCastException: java.lang.Integer无法转换为java.lang.Double

3

My Staff Entity defined in Java is like this :

final public class Staff {
    private int staffId;
    private String firstName = null;
    private String lastName = null;
    private String Email = null;
    private double salary;
    //and the setters and getters
}

我的查询代码:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Staff staff = null;
try {
    Criteria criteria = session.createCriteria(dto.Staff.class);
    criteria.add(Restrictions.eq("salary", 1000000));
    staff = (Staff) criteria.uniqueResult();
} catch(Exception e) {
    System.out.println("Error : " + e);
} finally {
    session.close();
}

但是当我运行此代码时,出现了一个错误,错误信息如下:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

如果我将数字显式转换为double类型,它就可以工作:
criteria.add(Restrictions.eq("salary", (double) 1000000));

没有显示地进行强制转换还有其他的方法吗? 并且我认为在Java中,从整型变量 Integer 到浮点数 Double 的转换应该是隐式的吧?
2个回答

4
Hibernate认为它是整数,但实际上它是双精度浮点数。
    criteria.add(Restrictions.eq("salary",   1000000d));

但是我没有在任何地方使用包装类。 - Amitab Das
有没有办法我可以动态地将“d”添加到数字上?因为我正在尝试编写一个函数,该函数应该设置任何类型的限制。实际上它可以是一个整数或字符串。有没有办法做到这一点? - Amitab Das
是的。您可以编写 new Double(xxx.toString()) - 这将正确处理无论 xxxDoubleIntegerString 或基本上任何可以合理转换为 Double 的内容。 - Dawood ibn Kareem

0

restriction.eq接受一个对象,因此无法进行隐式转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接