查询在sql developer中运行良好,但在hibernate中崩溃

查询在sql developer中运行良好,但在hibernate中崩溃,sql,hibernate,oracle10g,Sql,Hibernate,Oracle10g,在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会

在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
所有COL均为varchar2型。col1的类型为number。 数据库是oracle10g。 如果解决方案不明显,也欢迎使用变通方法:) 另外,我如何找出JDBC类型-101指的是什么。我以前见过-1,但不是-101

编辑:我尝试在命名的查询顶部使用返回标量,但没有成功。

编辑#2:是否有办法查看为“C”返回的数据类型。然后我使用答案中提供的一种解决方案。

我从未在Oracle上遇到过,但有时JDBC会为查询中的复杂表达式返回奇怪的类型,Hibernate无法解析这些类型

在这种情况下,您可以尝试向查询添加显式强制转换:

SELECT CAST((CASE ... END) AS varchar2) "C" FROM TABLE1

我从未在Oracle上遇到过这种情况,但有时JDBC会为查询中的复杂表达式返回奇怪的类型,Hibernate无法解析这些类型

在这种情况下,您可以尝试向查询添加显式强制转换:

SELECT CAST((CASE ... END) AS varchar2) "C" FROM TABLE1

如果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()); 
    }

}
当然,您必须使用您获得的值,而不是ov longvarchar和适当的Hibernate类型


(我在这里勾选了代码示例:

如果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()); 
    }

}
当然,您必须使用您获得的值,而不是ov longvarchar和适当的Hibernate类型


(我在这里修改了代码示例:

当我们通过查询传递参数而不是直接输入值时,会出现此错误。对于SQL,您可以通过将值指定为C=:S并在生成的新文本框中输入值来重新生成此错误。此问题的解决方案来自升级补丁,因为这是一个错误。

此错误来自于当我们通过查询传递参数而不是直接输入值时。对于SQL,您可以通过将值设为C=:S并在生成的新文本框中输入值来重新生成相同的参数。此问题的解决方案来自升级补丁,因为这是一个bug。

谢谢。执行此操作后,它显示:java.SQL.SQLException:ORA-00600:internal e e错误代码,参数:[qctcte1],[0],[],[],[],[],[],[],[],[],[],[],[]在sql开发人员中运行良好。顺便说一句,qctcte1是什么?@Kaushik:我对Oracle没有太多经验,所以我不知道如何处理它。谢谢。完成此操作后,它显示:java.sql.SQLException:ORA-00600:内部错误代码,参数:[qctcte1],[0],[],[],[],[],[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]在sql开发人员中运行良好。顺便说一句,qctcte1是什么?@Kaushik:我对Oracle没有太多经验,所以我不知道如何使用它。