2013-03-15 4 views
1

Я объект, называемый Lots следующим образом:Java EE NamedQuery и JOIN заявление - результаты в EJB Exception

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

Прежде всего, когда вы спрашиваете, почему вы получаете исключение, отправьте стек. Однако, я думаю, проблема в том, что вы все еще думаете SQL, когда вы должны думать JPQL. Попробуйте вместо этого:

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

Объяснение - Вы предполагаете, что каждый Lots запись будет содержать boatId столбец, который может или не может быть так. В @ManyToOne поставщик JPA, скорее всего, решит сохранить связь на стороне Boats. Что касается того, почему я написал запрос так, как я сделал, посмотрите на this.

+0

Спасибо, это сделал трюк! –

+0

Рад, что это помогло! Тем не менее, следите за тем, чтобы отслеживать стеки в будущем. – rdcrng

Смежные вопросы