这两天遇到一个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中缓存的执行计划作文本匹配的,这样换了后每换一个条件都要重新分析,缓存基本没用了),不过我也没想到更好的办法了
分享到:
相关推荐
在Java开发领域,依赖管理是项目构建中的关键环节,而`toplink-api.jar`和`toplink-essentials.jar`是两个重要的库文件,尤其对于处理对象关系映射(ORM)的问题至关重要。这两个JAR文件属于Oracle TopLink框架,一...
Toplink是由Oracle公司开发的一款企业级Java持久化框架,它为Java应用程序提供了一种高效的数据持久化解决方案。Toplink通过对象关系映射(ORM)技术将Java对象与数据库表进行映射,使得开发者能够更方便地操作...
Oracle TopLink最初由TopLink公司开发,后来被Oracle公司收购并集成到其产品线中,成为Oracle Fusion Middleware的一部分。 在ORM领域,TopLink扮演着一个桥梁的角色,它消除了Java对象与SQL数据库之间的语义差异,...
TopLink旨在简化Java应用开发过程中对数据库的操作,通过将对象模型与关系型数据库模型进行映射,实现数据的透明存储与检索。这本指南《Oracle TopLink Getting Started 10.1.3》旨在为初学者介绍TopLink的基本概念...
TopLink,全称为Oracle TopLink,是Oracle公司的一款对象关系映射(ORM)框架,它允许开发者在Java应用程序中通过对象模型来操作数据库,从而降低了数据访问层的复杂性。作为Java持久化解决方案的一部分,TopLink...
Oracle Toplink JPA
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
6. **事务管理(Transaction Management)**:在Java EE环境中,事务管理通常由容器自动处理。你可以通过在方法上添加`@Transactional`注解来指定事务边界。 7. **转换(Conversion)和事件(Events)**:TopLink...
toplink-api.jar、 toplink-api.jar
Oracle TopLink Grid 是一个强大的工具,它将Oracle Coherence(内存数据网格)的功能与TopLink对象关系映射框架集成,以实现高效的缓存和分布式计算。这篇文章主要关注如何使用Coherence作为TopLink的二级(L2)...
toplink 和spring 集成包
不用说了吧 大家都知道
**Toplink JPA注解参考** Toplink JPA(Java Persistence API)是Oracle公司提供的一种对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。JPA提供了丰富的注解,使得在Java...
toplink-essentials-agent.jar
TOPLink JPA的优势在于其高性能和对复杂数据模型的良好支持,同时也能够无缝集成到EclipseLink(Oracle的开源持久化框架)中,提供了广泛的持久化服务。 **2. Hibernate JPA** Hibernate是最早的ORM框架之一,后来...
标题 "Spring2.5 Struts2.0 TopLink Ext2例子" 涉及到的是一个集成使用四个关键开源框架的示例项目,这些框架在Web应用开发中扮演着重要角色。下面将详细介绍这些框架以及它们如何协同工作。 1. **Spring**(2.5...
通过学习《Oracle Fusion Middleware Developer's Guide for Oracle TopLink》,开发者可以全面掌握TopLink的使用方法,并能够有效地应用于实际项目中,从而提高开发效率、降低维护成本。无论是初学者还是经验丰富的...