【问题标题】:cross join issue in hibernate休眠中的交叉连接问题
【发布时间】:2011-06-18 10:20:16
【问题描述】:

我一直在将 Hibernate 3.2 用于我的 J2EE 应用程序和 Spring 2.5。最近我想要一个 hibernate 3.5(BigInt Identity 支持)的功能。所以我升级了我的 hibernate,现在我的查询遇到了一个不同的问题。

HQL 查询:-

select table from tableVO table where tableVO.subTableVO.id=:tableVO.id 

SQL 查询:-

select table_1_ID from table cross join subTable where subTable.id =table.id

我看到 Sybase ASE 不接受交叉连接是由休眠完成的。我该如何解决这个问题?

【问题讨论】:

    标签: java hibernate sap-ase


    【解决方案1】:

    检查您在休眠配置中设置的方言。我假设您在 Sybase ASE 15.x 上运行。正如您所发现的,Sybase 不(尚)支持 CROSS JOIN,这是 SybaseDialect 尝试使用的。请改用SybaseASE157DialectSybaseASE15Dialect。它将生成如下所示的语法:

    select table_1_ID from table, subTable where subTable.id =table.id
    

    【讨论】:

    • 这怎么没有被赞成!?一年半后谢谢你,先生。
    【解决方案2】:

    您可以更改休眠方言

    hibernate.cfg

    <property name="hibernate.dialect">com.YourProject.YourDialect</property>
    

    在你的方言类中,你应该输入你想要执行的语法。

    示例方言 DB2 更改

    public class DB2390Dialect extends DB2Dialect 
    {
    
        public String getIdentitySelectString() {
            return "select identity_val_local() from sysibm.sysdummy1";
        }...
    }
    

    希望对你有帮助

    【讨论】:

    • 我正在使用 SybaseAnyWhereDialect。对此有什么提示吗??
    • @user288794 您需要覆盖生成错误 sql 的方法。尝试在您的方言类中查找生成的语法。
    • 是的。我还是不能破解。
    • @user288794 你试过换方言了吗?
    • 是的。使用 Syabse11 方言,避免 ANSI 连接。
    【解决方案3】:

    这是 Hibernate 中隐式连接的错误。您可以通过为连接设置别名来修复它:

    select table from tableVO table
    join tableVO.subtableVO subtable
    where subtable.id=:tableVO.id 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2011-08-24
      • 2014-08-08
      • 1970-01-01
      • 2017-09-25
      • 2020-03-02
      相关资源
      最近更新 更多