hibernate生成cross join导致sybase不识别问题解决

转载 2015年11月19日 09:33:02

原文:http://blog.csdn.net/sjjbupt/article/details/8559886


升级了Hibernate到3.6.7,用的Sybase数据库,相同的hql语句,竟然生成了不同的sql语句;

以下分别是hql和新老版本生成的sql。我的sybase15不识别crossover,只好另想办法。

select new com.abc.boor.model.InformationView(c.id,a.id,a.title,a.content,rtrim(a.type),rtrim(a.level),a.status,a.processMemberId,a.createTime,c.name,o.name,a.createMemberId,m.name,a.flag) from Information a,Member c,Member m,Organize o where a.processMemberId= ?  and a.status='2' and c.id = a.processMemberId  and a.createMemberId =m.id and a.createOrganizeId=o.id order by a.createTime DESC



select member1_.BMCID as col_0_0_, informatio0_.AICID as col_1_0_, informatio0_.AICTIT as col_2_0_, informatio0_.AICCNT as col_3_0_, rtrim(informatio0_.AICTYP) as col_4_0_, rtrim(informatio0_.AICLVL) as col_5_0_, informatio0_.AICSTS as col_6_0_, informatio0_.AICPMID as col_7_0_, informatio0_.AICCTIM as col_8_0_, member1_.BMCNAM as col_9_0_, organize3_.BOCNAM as col_10_0_, informatio0_.AICCMID as col_11_0_, member2_.BMCNAM as col_12_0_, informatio0_.AICFLA as col_13_0_ from AIC informatio0_, BMC member1_, BMC member2_, BOC organize3_ where informatio0_.AICPMID=? and informatio0_.AICSTS='2' and member1_.BMCID=informatio0_.AICPMID and informatio0_.AICCMID=member2_.BMCID and informatio0_.AICCOID=organize3_.BOCID order by informatio0_.AICCTIM DESC


select member1_.BMCID as col_0_0_, informatio0_.AICID as col_1_0_, informatio0_.AICTIT as col_2_0_, informatio0_.AICCNT as col_3_0_, rtrim(informatio0_.AICTYP) as col_4_0_, rtrim(informatio0_.AICLVL) as col_5_0_, informatio0_.AICSTS as col_6_0_, informatio0_.AICPMID as col_7_0_, informatio0_.AICCTIM as col_8_0_, member1_.BMCNAM as col_9_0_, organize3_.BOCNAM as col_10_0_, informatio0_.AICCMID as col_11_0_, member2_.BMCNAM as col_12_0_, informatio0_.AICFLA as col_13_0_ from AIC informatio0_ cross join BMC member1_ cross join BMC member2_ cross join BOC organize3_ where informatio0_.AICPMID=? and informatio0_.AICSTS='2' and member1_.BMCID=informatio0_.AICPMID and informatio0_.AICCMID=member2_.BMCID and informatio0_.AICCOID=organize3_.BOCID order by informatio0_.AICCTIM DESC


解决办法:

1.src下新建org..MySybaseDialect包。

2.包下新建MySybaseDialect类。

3.类写为:

package org.MySybaseDialect;
public class MySybaseDialect extends org.hibernate.dialect.SybaseDialect { 

@Override 
public String getCrossJoinSeparator() { 
return ", "; 


4.applicationContext.xml做如下配置:

<prop key="hibernate.dialect">
org.MySybaseDialect.MySybaseDialect
</prop>

我的解决方法是Hibernate core里面已经有一种Sybase方言能够很好的匹配:

xy.hibernate.dialect=org.hibernate.dialect.SybaseASE15Dialect

对应的是:


换成这种方言就行了。问题解决





交叉连接(CROSS JOIN)

9.3.5  交叉连接(CROSS JOIN) 除了在FROM子句中使用逗号间隔连接的表外,SQL还支持另一种被称为交叉连接的操作,它们都返回被连接的两个表所有数据行的笛卡尔积,返回到的数据...
  • yixian918
  • yixian918
  • 2014年04月21日 15:25
  • 687

T-SQL 中的CROSS JOIN用法(半翻译)

今天来翻译一篇关于T-SQL的文章,本文可供微软认证70-461:QueryingMicrosoft SQL Server 2012的学习和练习之用。本文以翻译为主,引出个人工作中的一些思考,详见最后...
  • DBA_Huangzj
  • DBA_Huangzj
  • 2015年09月15日 13:09
  • 4546

SQL的各种连接(cross join、inner join、full join)的用法理解

SQL中的连接可以分为内连接,外连接,以及交叉连接 。 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘...
  • xiaoshunzi111
  • xiaoshunzi111
  • 2017年03月30日 08:40
  • 941

内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略

早就听说了内连接与外连接,以前视图中使用过这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践 概念 关键字: 左右连接 数据表的连接有: 1、内连接(自然连接): 只有两个...
  • lishehe
  • lishehe
  • 2013年10月23日 21:36
  • 8249

hibernate之一对一 外键关联 left join

在项目紧急这个节骨眼上,这
  • waiwai4701
  • waiwai4701
  • 2014年09月21日 18:04
  • 1158

[一起学Hive]之十一-Hive中Join的类型和用法

Hive中除了支持和传统数据库中一样的内关联、左关联、右关联、全关联,还支持LEFT SEMI JOIN和CROSS JOIN,但这两种JOIN类型也可以用前面的代替。 注意:Hive中Join...
  • achuo
  • achuo
  • 2016年05月06日 10:37
  • 283

Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题

一、问题背景分账表split_summary结构如下:create table SPLIT_SUMMARY ( uuid VARCHAR2(32) not null,...
  • honghailiang888
  • honghailiang888
  • 2017年07月10日 17:01
  • 3084

Hibernate中HQL语句的left join的例子详解

1.com.jcuckoo.entity添加ShowBook类,用来封装界面显示的数据 public class ShowBook { @Id private int id; private ...
  • guoquanyou
  • guoquanyou
  • 2014年10月24日 10:22
  • 19839

sybase数据库tempdb空间满故障解决

公司部分业务系统使用的是sybase数据库,  前几天开发同事使用过程中,数据库突然无法连接,发现报错,如下图;  该故障是由于tempdb存储空间已满,于是,为tempdb扩容,具体步骤...
  • iris_xuting
  • iris_xuting
  • 2016年12月20日 18:37
  • 548

在SYBASE中进行分页查询的方法

Reference: http://bbs.chinaunix.net/thread-1011442-1-1.html
  • s464036801
  • s464036801
  • 2014年05月28日 14:21
  • 2874
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate生成cross join导致sybase不识别问题解决
举报原因:
原因补充:

(最多只允许输入30个字)