hibernate中的交叉连接问题

发布于 2024-10-15 05:09:21 字数 436 浏览 2 评论 0原文

我一直在 Spring 2.5 的 J2EE 应用程序中使用 Hibernate 3.2。最近我想要 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

我看到交叉联接是由 hibernate 完成的,而 Sybase ASE 不接受该交叉联接。我该如何解决这个问题?

I have been using Hibernate 3.2 intailly for my J2EE application with Spring 2.5.Recently I wanted a feature of hibernate 3.5(BigInt Identity support).So I have upgraded my hibernate and now I facing a different issue with my queries.

HQL Query:-

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

SQL Query:-

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

I see that cross join is being done by hibernate which is not accepted by Sybase ASE. How can I fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦幻之岛 2024-10-22 05:09:21

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

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

Check the dialect you have set in hibernate configuration. I'm going to assume you're running on Sybase ASE 15.x. As you found out, Sybase does not (yet) support CROSS JOIN, which is what the SybaseDialect attempts to use. Instead, use SybaseASE157Dialect or SybaseASE15Dialect. It will generate syntax that should look like:

select table_1_ID from table, subTable where subTable.id =table.id
小…楫夜泊 2024-10-22 05:09:21

您可以更改 hibernate dialect

在方言类的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";
    }...
}

希望这有帮助

You can change hibernate dialect,

in hibernate.cfg

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

in your dialect class you should enter the syntax you want executed.

example dialect change for DB2

public class DB2390Dialect extends DB2Dialect 
{

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

Hope this helps

若水般的淡然安静女子 2024-10-22 05:09:21

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

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

This is a bug with implicit joins in Hibernate. You can fix it by aliasing your joins:

select table from tableVO table
join tableVO.subtableVO subtable
where subtable.id=:tableVO.id 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文