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