如何在hibernate中写左连接?

时间:2013-06-11 08:26:47

标签: 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,但在realation中没有bpv& uv

3 个答案:

答案 0 :(得分:2)

Hibernate有Criteria API,这是一种在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();

答案 1 :(得分:1)

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"

答案 2 :(得分:0)

你所要求的是不可能的,有一个Theta Join解决方案,但它只支持内部联接,所以你必须放弃这种方法并执行以下解决方案之一:

映射正确的关系:

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

使用本机SQL:

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