查询在sql developer中运行良好,但在hibernate中崩溃
在sqldeveloper中运行此命令时:查询在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会
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没有太多经验,所以我不知道如何使用它。