2013-03-15 13 views
1

我有一個實體,稱爲地段如下:的Java EE NamedQuery和JOIN語句 - 結果EJB異常

public class Lots implements Serializable { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int lotId; 

@ManyToOne 
private Boats boats; 

private int numCrates; 

.... 

而且我也有一個實體,稱爲船:

public class Boats implements Serializable { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int boatId; 

@ManyToOne 
private Users user; 

private String name; 

我想在批次上創建一個命名查詢,如下所示:

@NamedQueries({ 
@NamedQuery(name = "FindUsersByLot", query = "SELECT b FROM Lots b JOIN Boats a ON  (b.boats.boatId = a.boatId) WHERE a.user = :user")  
}) 

但是,這會導致EJB異常。

有誰知道我可以做一個JOIN命名查詢嗎?

謝謝。

回答

3

首先,當你問你爲什麼會遇到異常時,請發佈堆棧跟蹤。但是,我認爲問題在於,如果您應該考慮JPQL,您仍在考慮SQL。試試這個:

@NamedQuery(name = "FindUsersByLot", query = "SELECT b FROM Lots b JOIN b.boats a WHERE a.user = :user") 

解釋 - 你假設每個Lots記錄會包含一個boatId列,它可能會或可能不會是這樣。在@ManyToOne中,JPA提供者可能會選擇將關係存儲在Boats一側。至於爲什麼我按照我的方式編寫查詢,請查看this

+0

謝謝,這個伎倆! – 2013-03-15 13:25:37

+0

很高興幫助!不過,儘管如此,請儘快發佈堆棧跟蹤。 – rdcrng 2013-03-15 14:55:04