当选择JPA树时,childNodes始终为null

发布于 2024-10-07 19:54:38 字数 853 浏览 0 评论 0原文

我正在尝试使用 JPQL 选择树结构。映射工作与我的预期有点不同。它将树结构映射到父级,但 List childNodes 始终为 null :( 这是我的映射:

@Entity
@NamedQueries({
      @NamedQuery(name = "TreeNode.findAllTree", 
              query = "select p from TreeNode p  " +
                    "LEFT JOIN fetch p.parentNode"),
    })
public class TreeNode {
    @Id
    private long id = 0; 

    @ManyToOne
    @JoinColumn(name = "parent_id")
    public TreeNode parentNode;

    @OneToMany(mappedBy="parentNode")
    public List<TreeNode> childNodes; 

这是查询:

List<TreeNode> list = super.getEntityManager().createNamedQuery("TreeNode.findAllTree").getResultList();

这是我的表数据:

 ID, PARENT_ID
  1      NULL
  2         1
  3         1
  4         3

我尝试过急切和惰性 FetchType,但 childNodes 始终为 null ;( 有什么想法吗?

I'm trying to select tree structure using JPQL. Mapping works a bit different than I expected. It maps tree structure to parent but List childNodes is always null :( Here is my mapping:

@Entity
@NamedQueries({
      @NamedQuery(name = "TreeNode.findAllTree", 
              query = "select p from TreeNode p  " +
                    "LEFT JOIN fetch p.parentNode"),
    })
public class TreeNode {
    @Id
    private long id = 0; 

    @ManyToOne
    @JoinColumn(name = "parent_id")
    public TreeNode parentNode;

    @OneToMany(mappedBy="parentNode")
    public List<TreeNode> childNodes; 

Here is query:

List<TreeNode> list = super.getEntityManager().createNamedQuery("TreeNode.findAllTree").getResultList();

Here is my table data:

 ID, PARENT_ID
  1      NULL
  2         1
  3         1
  4         3

I've tried eager and lazy FetchType but childNodes is always null ;( Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原谅我要高飞 2024-10-14 19:54:38

奇怪的。您使用的 JPA 提供商和版本是什么?

如果你删除连接获取,你会得到孩子吗?
为子进程执行什么 SQL?

当您为节点设置父节点时,是否也添加子节点?如果您不这样做,那么没有子项的父项可能会缓存在您的 EntityManager 中,刷新是否会获取子项?

Odd. What JPA provider and version are you using?

If you remove the join fetch, do you get the children?
What SQL is executed for the children?

When you set the parent for a node, do you also add the child? If you don't then the parent with no children could be cache in your EntityManager, does a refresh get the children?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文