`
iamlotus
  • 浏览: 107903 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Toplink中由参数绑定引起的异常

阅读更多

这两天遇到一个bug,写的testcase在本地没错,到CI上就报错。查了一下log,发现原因是本地跑testcase时hijack了配置文件,注释掉了以下这句

login.setShouldBindAllParameters(true);
 

这样让Toplink不使用参数绑定,比较方便查看输出的SQL,而CI上使用了参数绑定,所以出问题了

 

 

   不使用参数绑定时,输出是这样的SQL,没有问题

SELECT trunc(t.create_time, 'DD') ta, COUNT(0) cnt
  FROM ts_task t
 GROUP BY trunc(t.create_time, 'DD')
 

   使用参数绑定时,'DD'被绑定了,,相当于以下SQL

  SELECT trunc(t.create_time, :1
) ta, COUNT(0) cnt
  FROM ts_task t
 GROUP BY trunc(t.create_time, :2
)

    这样即使:1和:2 都绑定相同的'DD',但Oracle并不会发现这个信息,从而报了

    ORA-00979: not a GROUP BY expression

 

    其实,如果Toplink能够比较绑定参数,把相同的参数归为一个占位符,从而生成以下SQL,那么还是可以用绑定还是可以的

 

  SELECT trunc(t.create_time, :1
) ta, COUNT(0) cnt
  FROM ts_task t
 GROUP BY trunc(t.create_time, :1
)
 

   遗憾的是,至少在Toplink 10.1.3中还没有实现此功能。

 

   最后的解决方法嘛,在ReportQuery一级使用了setShouldBindAllParameters(false)方法。这付出了执行计划不能重用的代价(因为Oracle是将整个SQL statement和SGA中缓存的执行计划作文本匹配的,这样换了后每换一个条件都要重新分析,缓存基本没用了),不过我也没想到更好的办法了

0
0
分享到:
评论

相关推荐

    toplink-api.jar,toplink-essentials.jar

    在Java开发领域,依赖管理是项目构建中的关键环节,而`toplink-api.jar`和`toplink-essentials.jar`是两个重要的库文件,尤其对于处理对象关系映射(ORM)的问题至关重要。这两个JAR文件属于Oracle TopLink框架,一...

    toplink 文档学习

    Toplink是由Oracle公司开发的一款企业级Java持久化框架,它为Java应用程序提供了一种高效的数据持久化解决方案。Toplink通过对象关系映射(ORM)技术将Java对象与数据库表进行映射,使得开发者能够更方便地操作...

    oracle toplink lib

    Oracle TopLink最初由TopLink公司开发,后来被Oracle公司收购并集成到其产品线中,成为Oracle Fusion Middleware的一部分。 在ORM领域,TopLink扮演着一个桥梁的角色,它消除了Java对象与SQL数据库之间的语义差异,...

    Oracle TopLink Getting Started 10.1.3

    TopLink旨在简化Java应用开发过程中对数据库的操作,通过将对象模型与关系型数据库模型进行映射,实现数据的透明存储与检索。这本指南《Oracle TopLink Getting Started 10.1.3》旨在为初学者介绍TopLink的基本概念...

    TopLink 教程

    TopLink,全称为Oracle TopLink,是Oracle公司的一款对象关系映射(ORM)框架,它允许开发者在Java应用程序中通过对象模型来操作数据库,从而降低了数据访问层的复杂性。作为Java持久化解决方案的一部分,TopLink...

    Oracle Toplink JPA

    Oracle Toplink JPA

    TopLink_Mysql例子

    toplink mysql5 开发工具:Eclipse3.3 for J2ee 简要过程(先导好mysqlJDBC包和toplink包,进mysql建好数据库), 1.新建pojo类,加入Annotation 2.在src目录下建META-INF目录,写好persistence.xml文件 3.写测试类 自动...

    toplink-essentials.jar

    toplink-essentials.jar toplink-essentials.jar

    jpa toplink相关jar包,完整版。

    6. **事务管理(Transaction Management)**:在Java EE环境中,事务管理通常由容器自动处理。你可以通过在方法上添加`@Transactional`注解来指定事务边界。 7. **转换(Conversion)和事件(Events)**:TopLink...

    toplink-api.jar

    toplink-api.jar、 toplink-api.jar

    Oracle Toplink Grid

    Oracle TopLink Grid 是一个强大的工具,它将Oracle Coherence(内存数据网格)的功能与TopLink对象关系映射框架集成,以实现高效的缓存和分布式计算。这篇文章主要关注如何使用Coherence作为TopLink的二级(L2)...

    spring-toplink-2.0-rc1.jar

    toplink 和spring 集成包

    toplink

    不用说了吧 大家都知道

    Toplink_JPA注解参考

    **Toplink JPA注解参考** Toplink JPA(Java Persistence API)是Oracle公司提供的一种对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。JPA提供了丰富的注解,使得在Java...

    toplink-essentials-agent.jar

    toplink-essentials-agent.jar

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    TOPLink JPA的优势在于其高性能和对复杂数据模型的良好支持,同时也能够无缝集成到EclipseLink(Oracle的开源持久化框架)中,提供了广泛的持久化服务。 **2. Hibernate JPA** Hibernate是最早的ORM框架之一,后来...

    Spring2.5 Struts2.0 TopLink Ext2例子

    标题 "Spring2.5 Struts2.0 TopLink Ext2例子" 涉及到的是一个集成使用四个关键开源框架的示例项目,这些框架在Web应用开发中扮演着重要角色。下面将详细介绍这些框架以及它们如何协同工作。 1. **Spring**(2.5...

    Oracle Fusion Middleware Developer's Guide for Oracle TopLink

    通过学习《Oracle Fusion Middleware Developer's Guide for Oracle TopLink》,开发者可以全面掌握TopLink的使用方法,并能够有效地应用于实际项目中,从而提高开发效率、降低维护成本。无论是初学者还是经验丰富的...

Global site tag (gtag.js) - Google Analytics