2011-01-31 103 views
4

我一直在用Spring 2.5對我的J2EE應用程序安全地使用Hibernate 3.2.Recently我想要一個hibernate 3.5(BigInt Identity支持)的功能。所以我升級了我的hibernate,現在我面臨着不同的問題與我的疑問。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的接受休眠完成。我怎樣才能解決這個問題?

回答

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

希望這有助於

+0

我正在使用SybaseAnyWhereDialect.Any提示? –

+0

@ user288794您需要重寫生成錯誤sql的方法。嘗試查看你的方言類生成的語法。 –

+0

@ user288794你需要額外的信息嗎? –

2

將檢查在Hibernate的配置設置的方言。我將假設您正在Sybase ASE 15.x上運行。正如您發現的那樣,Sybase不支持CROSS JOIN,這是SybaseDialect嘗試使用的。相反,請使用SybaseASE157DialectSybaseASE15Dialect。它會生成應該看起來像這樣的語法:

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

這是怎麼沒有upvoted!?謝謝你一年半之後,先生。 – jgitter

0

這是一個隱式連接在Hibernate中的錯誤。您可以通過別名加入來修復它:

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