2

我有一个名为很多的实体,如下所示:

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;

....

我还有一个名为 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;

我正在尝试在很多上创建一个命名查询,如下所示:

@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?

4

1 回答 1

8

首先,当您询问为什么会出现异常时,请发布堆栈跟踪。但是,我认为问题在于,SQL当您应该思考时,您仍在思考JPQL。试试这个:

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

说明 - 您假设每条Lots记录都将包含一boatId列,这可能是也可能不是。在@ManyToOneJPA 中,提供者可能会选择将关系存储在Boats一边。至于我为什么要这样写查询,看看这个

于 2013-03-15T13:07:16.667 回答