4

我一直在将 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 不接受的休眠完成。我怎样才能解决这个问题?

4

3 回答 3

3

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

select table_1_ID from table, subTable where subTable.id =table.id
于 2012-11-29T20:33:46.140 回答
1

您可以更改休眠方言

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";
    }...
}

希望这可以帮助

于 2011-01-31T08:28:23.580 回答
0

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

select table from tableVO table
join tableVO.subtableVO subtable
where subtable.id=:tableVO.id 
于 2012-11-30T20:41:14.237 回答