如何通过外键表获取关联对象列表

时间:2013-12-30 15:31:08

标签: hibernate jpa jpql

我的NodesList<Node>个孩子Nodes。遵循JPA约定,我最终得到以下表格:

t_node具有idnamedepartment

属性

t_node_t_node具有t_node_idchildNodes_id

属性

我想返回父节点的子节点列表。如何编写entitymanager查询来执行此操作?

我最接近的是:

List<Node> childNodes = (List<Node>) entityManager.createQuery("select n from Node n JOIN n.t_node_t_node t where n.id = " + parent_id).getResultList();

返回异常:Could not resolve property t_node_t_node

1 个答案:

答案 0 :(得分:1)

数据库列t_node_t_node不能在JPQL查询中使用。 JPQL查询操作实体及其持久属性,而不是数据库表和列。

可能您的实体大致如下:

@Entity
public class Node {
    @Id private Long id;

    @ManyToOne
    Node parent;

    @OneToMany(mappedBy = "parent")
    private List<Node> nodes;
...
}

当给出父节点的id时,子节点可以是如下查询:

Long parentId = 1L;
Query q = em.createQuery("SELECT n FROM Node n WHERE n.parent.id =  :parentId");
q.setParameter("parentId", parentId);
List<Node> childNodes = q.getResultList();