JPQL查询 - 从父项获取列表中的子项

时间:2013-05-24 15:02:08

标签: jpql

如果我有文件夹 ,如果记录存在记录,我将如何创建一个JPQL查询: id 记录 :refId (命名参数)。我希望从查询中返回记录,因为还有其他数据属于记录所需的数据。

以下是实体:

@Entity
public class Folder {
    @Id
    @Column(name = "id")
    private Long id;

    @OneToMany(targetEntity = Record.class, cascade = { CascadeType.ALL })
    @JoinColumn(name = "RECORD_FOLDER_0")
    @OrderBy("id ASC")
    private List<Record> records;
    ...
}

@Entity
public class Record {
    @Id
    @Column(name = "id")
    private Long id;

    @Basic
    @Column(name = "refId")
    private Long refId;

    @Basic
    @Column(name = "data", length = 255)
    private String data;
    ...
}

常规SQL看起来像:

.createNativeQuery(String.format("SELECT * FROM record r WHERE r.refId=%d AND r.RECORD_FOLDER_0=%d", refId, folderId));

我正在努力研究如何使用JPQL查询来实现这一目标。

1 个答案:

答案 0 :(得分:1)

由于您没有Folder中对父Record的引用,因此您必须从Folder开始并加入孩子Record。这样的事情可以解决问题:

TypedQuery<Record> q = em.createQuery(
    "SELECT r FROM Folder f JOIN f.records r " +
    "WHERE f.id = :folderId AND r.refId = :refId", Record.class);
q.setParameter("folderId", folderId);
q.setParameter("refId", refId);