hibernate classcastexception

dzjeubhm  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(308)

我有一个hqlquery文件,其中包含大约800个查询。在运行时检测到要在中执行的查询,并Map从浏览器传递的参数,默认情况下,我的代码将从浏览器传递的参数转换为long。问题是在某些bean类中,变量(即比较的左侧)是int,在某些情况下是long。但在运行时,我想不出任何方法来检测比较参数左侧的“类型”。
例如:选择*from employee e,其中e.id=$empid$
$empid$将替换为运行时从浏览器传递的值,默认情况下,我的代码将传递的值强制转换为long。如果e.id是int,那么这将抛出classcastexception。是否有任何方法可以在运行时检测e.id的类型。或者其他解决这个问题的方法。
我试着用rhs来编号,但没用。任何建议都会很受欢迎的。谢谢

wpx232ag

wpx232ag1#

首先,您需要访问classmetadata:

ClassMetadata metadata=sessionFactory.getClassMetadata(Employee.class);

您可以按以下方式编写hql查询:

Number id = ...;
Type identifierType = metadata.getIdentifierType();
Class identifierClass = identifierType.getReturnedClass();                                

if(Long.class.equals(identifierClass)) {
    id = id.longValue();
} else {
    id = id.intValue();
}

session.createQuery("select e from Employee e where e.id = :id")
   .setParameter("id", id, identifierType)
   .list();

提供实际类型应该可以解决您的问题。

相关问题