2011-05-11 86 views
1

我想要使用EJBQL(具有底層的MySQL數據源)連接兩個EJB。有問題的兩個表是使用EJBQL的LEFT JOIN表

Machine 
    - Hostname 
    - ... unrelated fields ... 

Location 
- Code 
- Human readable description 

的表格應留加入了對位置代碼和機器的主機名的前三個字符。在直線上升的MySQL的命令是:

SELECT * FROM machine m LEFT JOIN location l ON (SUBSTRING(m.`Name`, 1,3) = l.`Code`); 

當我把類似的事情到EJBQL我得到的所有類型的錯誤,從空poninter例外無效的語法例外raning的 - 這是我曾嘗試:

query="SELECT NEW someObj(m, loc) FROM Machine as m " + 
     "LEFT JOIN FETCH Location as loc " + 
     "WHERE (SUBSTRING(m.hostname, 1, :length) = loc.code)" 

我也嘗試使用「ON」,而不是「WHERE」 - 但EJBQL回來了,當我使用上的意外關鍵字...

所以 - 有沒有人在成功之前做這樣的事情?對於EJBQL的文件似乎表明,LEFT JOIN是確定的,所以我不知道這筆交易是什麼...

感謝


編輯:我得到的例外是:

outer or full join must be followed by path expression - 它葬在同一行空指針交易

編輯2:

有一臺機器和地點,聯合國沒有關係幸運的是我不能改變的

回答

0

如果在兩者之間沒有關係,如果你真的只需要Machine對象,你可以做的就是改變LEFT JOIN FETCHIN聲明,如(僞代碼):

select from Machine m 
where (SUBSTRING(m.hostname, 1, :length) in (some kind of logic about Location)