Hibernate从2升级到3不支持Oracle8外连接(+)的解决办法 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-15
, factory );translators[i] = factory.getSettings().getQueryTranslatorFactory() .createFilterTranslator(hql, concreteQueryStrings[i], enabledFilters, factory );
Hibernate从2升级到3不支持Oracle8外连接(+)的解决办法(4)时间:2011-08-31它们的职能是获取SessionFactory (hibernate.cfg.xml)所配置的HQL语法分析器,这也就是我们的切入点,我们所希望的事情是: 当构造HQLQueryPlan时,发现传给的hql是一个Oracle 那样的THETA-STYLE 连接查询语句(即像有(+)那样的语句),我们就绕开在 hibernate.cfg.xml 所配置的AST HQL语法翻译器,而是采用能够理解这种语法的传统的语法翻译器。 因此我们只要把 HQLQueryPlan类的这个构造函数中的 if ( collectionRole == null) { …………………………… } 改为如下: if (collectionRole == null) { // 如果hql语句中使用Oralce式的外连接方式就用传统的语法翻译器 if (hql.replaceAll(" s*", "").indexOf("(+)") != -1) { translators[i] = new ClassicQueryTranslatorFactory().createQueryTranslator(hql, concreteQueryStrings[i], enabledFilters, factory); } else { translators[i] = factory.getSettings().getQueryTranslatorFactory() .createQueryTranslator(hql, concreteQueryStrings[i], enabledFilters, factory); } translators[i].compile(factory.getSettings().getQuerySubstitutions(), shallow);} else { // 如果hql语句中使用Oralce式的外连接方式就用传统的语法翻译器 if (hql.replaceAll(" s*", "").indexOf("(+)") != -1) { translators[i] = new ClassicQueryTranslatorFactory().createFilterTranslator(hql, concreteQueryStrings[i], enabledFilters, factory); } else { translators[i] = factory.getSettings().getQueryTranslatorFactory() .createFilterTranslator(hql, concreteQueryStrings[i], enabledFilters, factory); } ((FilterTranslator) translators[i]).compile(collectionRole, factory.getSettings() .getQuerySubstitutions(), shallow);}if (collectionRole == null) {// 如果hql语句中使用Oralce式的外连接方式就用传统的语法翻译器if (hql.replaceAll(" s*", "").indexOf("(+)") != -1) { translators[i] = new ClassicQueryTranslatorFactory().createQueryTranslator(hql, concreteQueryStrings[i], enabledFilters, factory);} else { translators[i] = factory.getSettings().getQueryTranslatorFactory() .createQueryTranslator(hql, concreteQueryStrings[i], enabledFilters, factory);}translators[i].compile(factory.getSettings().getQuerySubstitutions(), shallow);} else {// 如果hql语句中使用Oralce式的外连接方式就用传统的语法翻译器if (hql.replaceAll(" s*", "").indexOf("(+)") != -1) { translators[i] = new ClassicQueryTranslatorFactory().createFilterTranslator(hql, concreteQueryStrings[i], enabledFilters, factory);} else { translators[i] = factory.getSettings().getQueryTranslatorFactory() .createFilterTranslator(hql, concre |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Hibernate从2升级到3不支持Oracle8外连接(+)的解决办法 - 编程入门网的所有评论