当我在sqldeveloper中运行此命令时:
SELECT CASE
WHEN TABLE1.COL1 IS NOT NULL
THEN (
CASE
WHEN TABLE1.COL2 IS NOT NULL
THEN TABLE1.COL3
ELSE TABLE1.COL4
END)
WHEN TABLE1.COL5 IS NOT NULL
THEN TABLE1.COL6
ELSE TABLE1.COL7 END "C" FROM TABLE1它运行得很好。当我通过Hibernate会话运行它时,它给出了:
No Dialect mapping for JDBC type: -101所有的cols都是varchar2类型。col1的类型为number。数据库是oracle 10g。如果解决方案不是很明显,也欢迎解决方法:)另外,我如何才能找到JDBC type -101所指的是什么?我以前见过-1,但没见过-101。
编辑:我尝试在命名查询No luck上使用返回标量。
EDIT#2:有没有办法查看"C“返回的数据类型。然后我使用答案中提供的解决方案之一。
发布于 2011-03-05 00:47:41
如果axtavt的答案不起作用,您可以按照以下模式定义自己的类型映射:
public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect
{
public MySQL5Dialect()
{
super(); // register additional hibernate types for default use in scalar sqlquery type auto detection
registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
}
}当然,你必须使用你得到的值,而不是longvarchar和合适的Hiberante类型。
(我在这里截取了代码示例:http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483
发布于 2012-11-27 14:29:05
当我们通过查询传递一个参数而不是直接将值放入时,就会出现这个错误。对于SQL,您可以通过给出C= :S的值并在生成的新文本框中输入值来重新生成相同的值。这个问题的解决方案出现在升级补丁中,因为这是一个错误。
发布于 2011-03-05 00:41:17
我在Oracle上从未遇到过这种情况,但有时JDBC会为查询中的复杂表达式返回奇怪的类型,而Hibernate无法解析这些类型。
在这种情况下,您可以尝试向查询添加显式强制转换:
SELECT CAST((CASE ... END) AS varchar2) "C" FROM TABLE1https://stackoverflow.com/questions/5196064
复制相似问题