Hibernate JPQL-如何通过子实体中定义的关系而不是查询根进行连接

Hibernate JPQL-如何通过子实体中定义的关系而不是查询根进行连接,hibernate,jpql,Hibernate,Jpql,我对一些JPQL查询有问题。我有一个根对象,它有许多类,它们的关系都是从根开始的。不幸的是,在这段遗留代码中,我还有一个叶类,其中与根的关系被描述为manytone。我想对这些对象进行过滤。由于我是动态构建查询的,并且叶并不总是需要的,而且在许多情况下,对于给定的根,叶并不存在,所以我不想更改查询的根 因为它是没有任何真正测试套件的遗留代码,所以我不喜欢在根类中创建镜像关系 我尝试过类似“从根向左连接叶”的方法,希望hibernate能够足够聪明地知道这些类之间的关系,但我错了。关于如何实现这一

我对一些JPQL查询有问题。我有一个根对象,它有许多类,它们的关系都是从根开始的。不幸的是,在这段遗留代码中,我还有一个叶类,其中与根的关系被描述为manytone。我想对这些对象进行过滤。由于我是动态构建查询的,并且叶并不总是需要的,而且在许多情况下,对于给定的根,叶并不存在,所以我不想更改查询的根

因为它是没有任何真正测试套件的遗留代码,所以我不喜欢在根类中创建镜像关系

我尝试过类似“从根向左连接叶”的方法,希望hibernate能够足够聪明地知道这些类之间的关系,但我错了。关于如何实现这一点有什么帮助吗


编辑:

我不能把实际的代码,但它会像下面。当我看到它时,它不是关于JPQL中的多个连接,而是通过定义子实体的关系而不是根实体的关系来连接

@Entity
class Root{
    @OneToMany
    SomeLeaf someLeaf;

    @ManyToOne
    OtherLeaf otherLeaf;    
}


@Entity
class SomeLeaf{
    String someProperty;
}


@Entity
class OtherLeaf{
    String otherProperty;
}


@Entity
class DifferentLeaf{
    @ManyToOne
    Root root;

    String differentProperty;
}
我想发送的查询是这样的。然后将DifferentLeaf关系移动到子查询是否还有其他选项

select
    r
from
    Root root
    left join r.someLeaf someLeaf
    left join DifferentLeaf differentLeaf
where
    someLeaf.someProperty = 'someValue'
    and otherLeaf.otherProperty = 'otherValue'
    and (
         differentLeaf.differentProperty = 'differentValue'
         or differentLeaf not exists
    )

向我们展示实体的代码,并告诉我们查询应该返回什么。谢谢回复。我已经更新了这个问题和标题。