0 0

关于Hibernate native sql的问题10

各位牛哥,小弟在一个项目中要把以前的jdbc实现的一个模块,搬到现在的spring2.5+hibernate3的架构中,但是苦于对hibernate native sql没有使用经验,google了半天试过了所有可行的办法都不行,现在把问题帖出来,希望各位牛哥能给点建议,跪谢!!
一段sql如下:在pl/sql中跑过,没有问题
SELECT distinct c.plancode, c.plantitle FROM t_pdf_planbase c , t_pdf_planchan d WHERE c.plancode = d.plancode AND d.channelcd in ( '02','04','21','41') and c.prriind = '2' and c.plancode not in (select c.plancode from t_pdf_planbase c where c.planeddt < sysdate)

Hibernate dao代码如下:
public List getAllPlanCode(String tableOwner){   
        String sql = "SELECT distinct {c.planCode},c.plantitle as {c.planTitle} " +   
        " FROM " + tableOwner + "t_pdf_planbase c , " + tableOwner + "t_pdf_planchan d " +   
        " WHERE c.plancode = d.plancode " +   
        " AND d.channelcd in ( '02','04','21','41') " +   
        " and c.prriind = '2' " +   
        " and c.plancode not in "  +   
        " (select {c.planCode}"  +   
        " from " + tableOwner + "t_pdf_planbase c "  +   
        " where c.planeddt < sysdate) " ;   
        System.out.println("--- sql of selectAllPlanCode: " + sql);   
        return getSession().createSQLQuery(sql.toString()).addEntity("c",PdfPlanBase.class).addEntity("d",PdfPlanChan.class).list();   
    }  



后台jboss抛错信息如下:
17:12:36,328 INFO [STDOUT] --- sql of selectAllPlanCode: SELECT distinct {c.planCode},c.plantitle as {c.planTitle} FROM t_pdf_planbase c , t_pdf_planchan d WHERE c.plancode = d.plancode AND d.channelcd in ( '02','04','21','41') and c.prriind = '2' and c.plancode not in (select {c.planCode} from t_pdf_planbase c where c.planeddt < sysdate)
17:12:36,343 WARN [JDBCExceptionReporter] SQL Error: 904, SQLState: 42000
17:12:36,343 ERROR [JDBCExceptionReporter] ORA-00904: "PLANCODE617_0_": 标识符无效
谢谢各位了!!!!
2008年6月15日 10:36

2个答案 按时间排序 按投票排序

0 0

从你的log中看,是你的slect语句选出的字段无法拼成你需要的对象。
可以考虑:

SELECT distinct {c.*}, {d.*} FROM t_pdf_planbase c , t_pdf_planchan d WHERE c.plancode = d.plancode AND d.channelcd in ( '02','04','21','41') and c.prriind = '2' and c.plancode not in (select c.plancode from t_pdf_planbase c where c.planeddt < sysdate) 

还有一种可能性是你的c表的主键类型有问题。

2008年6月16日 09:45
0 0

hibernate的启动属性中配置hibernate.show_sql可以看到Hibernate最总生成的SQL,COPY下来调试。

BTW,个人推荐不要用HQL或者原生SQL,否则Hibernate的减轻SQL输入的长处就被消耗掉啦。推荐使用DetachedCriteria来构建查询对象,估计能解决90%的问题,而不用陷入到无尽的改SQL-重启-调试-改SQL的循环当中。

2008年6月16日 00:22

相关推荐

    Hibernate之原生Native SQL查询

    然而,尽管Hibernate提供了强大的HQL(Hibernate Query Language)和Criteria API,但在处理某些特定的、复杂的SQL查询时,可能无法满足需求,这时就需要用到“原生的Native SQL查询”。 Native SQL查询允许我们...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    在Java的持久化框架Hibernate中,除了使用HQL(Hibernate Query Language)进行数据查询外,还可以使用Native SQL来访问数据库。本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体...

    hibernate 执行原生sql的几种方式

    在Java的持久化框架Hibernate中,执行原生SQL(Native SQL)是常见需求,尤其是在处理特定数据库特性或者优化性能时。本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1....

    hibernate将本地SQL查询结果封装成对象

    首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者充分利用SQL的功能,比如进行复杂的统计计算或者处理特定数据库的特性...

    使用hibernate对sqlserver 2005进行增删改查

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...

    Native SQL查询 (使用SQLQuery).doc

    在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...

    hibernate映射主键生成策略native

    ### Hibernate映射主键生成策略native #### 一、引言 在ORM(对象关系映射)技术中,Hibernate作为一款流行的Java持久层框架,在处理数据持久化方面提供了丰富的功能和灵活性。其中,主键生成策略是Hibernate配置...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    sqlserver的hibernate

    **SQLServer与Hibernate的整合应用** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的SQL语句。本教程将介绍如何使用Hibernate操作...

    hibernate3.jar

    hibernate native Sql Rounding necessary 解决

    Native-SQL查询 (1).ppt

    本节主要探讨的是如何在Hibernate框架中使用Native SQL查询,它允许开发者直接执行原生的SQL语句,绕过HQL(Hibernate Query Language)进行更灵活的数据操作。 Hibernate是一个流行的Java对象关系映射(ORM)框架...

    hibernate sql案例

    3. Native SQL:如果需要执行特定于数据库的SQL语句,可以使用`Session.createSQLQuery()`方法。虽然这样失去了部分ORM的优势,但在处理复杂查询时非常有用。 4. Named Queries:预先在Hibernate配置文件中定义的...

    hibernate源码分析过程

    Hibernate 支持 native SQL 操作,可以使用原生 SQL 语句来查询对象。 性能 Hibernate 的性能可以通过一级缓存和二级缓存来提高。一级缓存可以缓存对象的状态,二级缓存可以缓存查询结果。 Hibernate 也支持第三方...

    Hibernate_NSQL&HQL增删改操作

    在Hibernate框架中,进行数据库操作时,开发者可以选择使用两种不同的查询语言:NSQL(Native SQL)和HQL(Hibernate Query Language)。这两种查询方式各有优势,在不同的场景下使用可以达到最佳的效果。 ##### 一...

    hibernate多表联合查询

    有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的Native SQL查询功能。示例如下: ```java String sql = "SELECT b.name, COUNT(a.fee), MIN(a.chargeBeginTime), MAX(a.chargeEndTime) " + ...

    Hibernate的char问题.txt

    在给定的文件“Hibernate的char问题.txt”中,虽然描述较为模糊,但我们可以根据提供的 SQL 语句推测出,这里讨论的是在使用 Hibernate 进行数据查询时,如何正确地处理 `char` 类型的数据字段。 #### 三、问题分析...

    hibernate-3.2源代码

    - Native SQL:直接执行SQL查询,适用于Hibernate无法满足的复杂场景。 - Criteria API:动态构建查询,无需预先编写查询字符串。 十、JPA支持 Hibernate 3.2增加了对Java Persistence API(JPA)的支持,使得...

    Hibernate5.2.11高清版,最新版本

    原生SQL查询(Native SQL Queries)部分讲解了如何在Hibernate中执行原生SQL语句,并且如何处理查询结果。 空间查询(Spatial)描述了如何在Hibernate中处理空间数据和执行空间查询。 多租户(Multitenancy)讨论...

Global site tag (gtag.js) - Google Analytics