gpt4 book ai didi

java - 比较 int 和 long 时发生 Hibernate ClassCastException

转载 作者:行者123 更新时间:2023-11-30 03:35:40 25 4
gpt4 key购买 nike

我有一个 HQLquery 文件,其中包含大约 800 个查询。在运行时检测到要执行的查询,并映射从浏览器传递的参数,默认情况下,我的代码将从浏览器传递的参数转换为 Long。问题是在某些 bean 类中,变量(即比较的左侧)是 int ,而在某些中如果是长的。但在运行时我无法想出任何方法来检测比较参数左侧的“类型”。

说:从员工 e 中选择 *,其中 e.id=$empid$

$empid$ 被运行时从浏览器传递的值替换,并且默认情况下我的代码将传递的值转换为 Long。如果 e.id 是 int 那么这将抛出 ClassCastException 。有没有办法在运行时检测 e.id 的类型。或者任何其他想法来解决这个问题。

我尝试将 RHS 转换为 Number,但它对我不起作用。任何建议都将非常感激。谢谢

最佳答案

首先,您需要访问 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();

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

关于java - 比较 int 和 long 时发生 Hibernate ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com