Hibernate 如何通过外键表获取关联对象列表
我有Hibernate 如何通过外键表获取关联对象列表,hibernate,jpa,jpql,Hibernate,Jpa,Jpql,我有节点,它们有子节点列表。按照JPA惯例,我最后得出以下表格: t_节点具有属性id、name、和department t\u node\u t\u node具有属性t\u node\u id和childNodes\u id 我想返回父节点的子节点列表。如何编写entitymanager查询来执行此操作 我得到的最接近的结果是: List<Node> childNodes = (List<Node>) entityManager.createQuery("select
节点
,它们有子节点列表
。按照JPA惯例,我最后得出以下表格:
t_节点
具有属性id
、name
、和department
t\u node\u t\u node
具有属性t\u node\u id
和childNodes\u 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();
List childNodes=(List)entityManager.createQuery(“从节点n中选择n加入n.t_节点_节点t,其中n.id=“+parent_id”).getResultList();
返回异常:
无法解析属性t_节点t_节点
数据库列t_节点t_节点
不能在JPQL查询中使用。JPQL查询操作实体及其持久属性,而不是数据库表和列
您的实体可能大致如下所示:
@Entity
public class Node {
@Id private Long id;
@ManyToOne
Node parent;
@OneToMany(mappedBy = "parent")
private List<Node> nodes;
...
}
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();
@实体
公共类节点{
@Id私人长Id;
@许多酮
节点父节点;
@OneToMany(mappedBy=“家长”)
私有列表节点;
...
}
当父节点id给定时,子节点可以进行如下查询:
@Entity
public class Node {
@Id private Long id;
@ManyToOne
Node parent;
@OneToMany(mappedBy = "parent")
private List<Node> nodes;
...
}
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();
Long parentId=1L;
Query q=em.createQuery(“从节点n中选择n,其中n.parent.id=:parentId”);
q、 setParameter(“parentId”,parentId);
List childNodes=q.getResultList();
我用@manytone节点父节点更新了我的节点对象
并添加了(mappedBy=“parent”)
。现在创建数据库时,不会创建我的t\u节点\u t\u节点
表。我已经实现了所有其他功能,并且得到了childNodes
列表的空指针。我现在看不出他们之间有什么联系。我假设孩子只能有一个父母。在这种情况下,将出现一对多/多对一,然后将其作为附加列具体化到数据库表中。若一个子系统可以有多个父系统,那个么可以使用@ManyToMany(这样就会有联接表)。