1

我有以下表结构

**BPV table** 
  id, vid, bid

**vt table** 
   vid, name, gender

**uv table**
   uvid, vid, cast,...

我想在休眠(mysql)中基于vid在BPV,uv之间写左连接

bpv 实体的 vt 是一对一的,uv 的 vt 是一对一的,但实际上没有 bpv &uv

4

3 回答 3

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();
于 2013-06-11T09:37:24.643 回答
1

休眠 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"
于 2013-06-11T08:49:54.250 回答
0

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

映射正确的关系:

如果这个查询是一个不寻常的场景,你不必改变你的实际映射,你可以用新的映射创建一个新的 dto 类,并将它用于这个查询。

使用本机 SQL:

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

于 2013-06-11T15:09:00.463 回答