Java EE NamedQuery和JOIN语句 - 导致EJB异常

Pau*_*ell 1 ejb exception named-query java-ee

我有一个名为Lots的实体如下:

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;

....
Run Code Online (Sandbox Code Playgroud)

我还有一个名为Boats的实体:

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;
Run Code Online (Sandbox Code Playgroud)

我试图在Lots上创建一个命名查询,如下所示:

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

但这会导致EJB异常.

有谁知道我如何在命名查询中进行JOIN?

谢谢.

rdc*_*rng 6

首先,当你问为什么会遇到异常时,请发布堆栈跟踪.但是,我认为问题是你还在考虑SQL什么时候应该思考JPQL.试试这个:

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

解释 - 您假设每条Lots记录都包含一boatId列,可能是也可能不是.在@ManyToOneJPA提供商可能会选择存储关系Boats.至于为什么我按照我的方式编写查询,请查看此内容.