首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询在sql developer中运行良好,但在hibernate中崩溃

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

Stack Overflow用户
提问于 2011-03-04 23:51:49
回答 3查看 512关注 0票数 0

当我在sqldeveloper中运行此命令时:

代码语言:javascript
复制
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会话运行它时,它给出了:

代码语言:javascript
复制
No Dialect mapping for JDBC type: -101

所有的cols都是varchar2类型。col1的类型为number。数据库是oracle 10g。如果解决方案不是很明显,也欢迎解决方法:)另外,我如何才能找到JDBC type -101所指的是什么?我以前见过-1,但没见过-101。

编辑:我尝试在命名查询No luck上使用返回标量。

EDIT#2:有没有办法查看"C“返回的数据类型。然后我使用答案中提供的解决方案之一。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-05 00:47:41

如果axtavt的答案不起作用,您可以按照以下模式定义自己的类型映射:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2012-11-27 14:29:05

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

票数 2
EN

Stack Overflow用户

发布于 2011-03-05 00:41:17

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

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

代码语言:javascript
复制
SELECT CAST((CASE ... END) AS varchar2) "C" FROM TABLE1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5196064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档