我有以下表结构
**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
答案 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))
来获取实体列表。