Java 如何在hibernate中编写左连接?

Java 如何在hibernate中编写左连接?,java,mysql,hibernate,Java,Mysql,Hibernate,我有以下表格结构 **BPV table** id, vid, bid **vt table** vid, name, gender **uv table** uvid, vid, cast,... 我想在hibernate(mysql)中基于vid编写BPV和uv之间的左连接 bpv实体的vt为一对一,而uv的vt为一对一,但实现中没有bpv和uvHibernate SQL: from BPV where BPV.uv.cast = "your_condition"

我有以下表格结构

**BPV table** 
  id, vid, bid

**vt table** 
   vid, name, gender

**uv table**
   uvid, vid, cast,...
我想在hibernate(mysql)中基于vid编写BPV和uv之间的左连接


bpv实体的vt为一对一,而uv的vt为一对一,但实现中没有bpv和uv

Hibernate SQL:

from BPV where BPV.uv.cast = "your_condition"
它需要正确描述实体和依赖关系

或纯SQL:

select * from BPV left join uv on BPV.vid = uv.vid where uv.cast = "your_condition"

Hibernate有CriteriaAPI,这是在OO方法中执行查询的好方法。如果您拥有持久实体,则可以执行以下操作:

Criteria criteria = session.createCriteria(BPV.class, "bpv");
criteria.createCriteria("bpv.vt", "vt", CriteriaSpecification.LEFT_JOIN);
criteria.createCriteria("vt.uv", "uv", CriteriaSpecification.LEFT_JOIN);
// add restrictions
return criteria.list();

您所要求的是不可能的,有一个θ连接解决方案,但它只支持内部连接,因此您必须放弃该方法,并执行以下解决方案之一:

映射正确的关系:

如果此查询是一个不寻常的escenario,则不必更改实际映射,您可以使用新映射创建一个新的dto类,并将该类用于此查询

使用本机SQL:


这也非常简单,使用
.createSQLQuery()
来运行本机查询,您可以使用
.addScalar()
+
.setResultTransformer(Transformers.aliasToBean(someDto.class))
来获取实体列表。

,您尝试的查询是什么,但不起作用?您至少可以粘贴您当前使用的查询…
select*from BPV left join uv on BPV.vid=uv.vid
您需要类似的东西吗?我知道mysql中如何在hibernate中执行您可以执行hibernate本机查询,无论如何,您似乎在使用sql/hql。bpv和uv之间没有关系。它们都与vt表有共同之处。因此,上述查询不可能。EBPV实体将vt作为一对一进行查询,以及uv将vt作为一对一进行查询,但在实现中没有bpv和uv。如果您使用@OneToOne字段和FetchType描述实体。急切,您可以简单地使用hql“来自bpv”。它提供了一个列表,每个bpv都有vt字段,其中有uv字段。如果您希望HQL具有条件,请使用“来自bpv,其中bpv.vt.uv.cast=…”,就像Javacriteria中的对象从不满足上述要求一样