知识大全 Hibernate的HQL多表联合查询使用left join方式
Posted 知
篇首语:胸怀万里世界, 放眼无限未来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate的HQL多表联合查询使用left join方式相关的知识,希望对你有一定的参考价值。
Hibernate的HQL多表联合查询使用left join方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Hibernate不支持left join带on的条件查询
解决办法 使用原生SQL或者使用HQL方式需要修改hbm文件(如果项目中大部分不适用级联配置情况下)
需求是查询网络信息 网络信息中关联了分区 网络IP( 个网络 N个网络IP) 网桥信息
HQL:
public void queryVnets(Page page)
StringBuffer hql = new StringBuffer()
hql append( select new Map(vn id as id vn vnName as vnName b name as vnType )
hql append( vn vnIptype as vnIptype vn vnIp as vnIp vn vnNat as vnNat vn vnFlag as vnFlag )
hql append( vn vnetFlag as vnetFlag (case when sum(vmvn state)= then else end) as vnState )
hql append( vn useType as useType vn createTime as createTime )
hql append( zone oneName as oneName zone oneHypervisor as oneHypervisor zone oneSeq as oneSeq) )
hql append( from VnetTable vn ZoneTable zone BridgeTable b )
hql append( left join fetch vn VnTables vmvn where zone id = vn zoneId and vn vnType = b id )
… …
hql append( group by vn id )
if (vnState != null && ! equals(vnState))
if ( equals(vnState))
hql append( having sum(vmvn state)= )
else if ( equals(vnState))
hql append( having sum(vmvn state)!= )
hbm配置文件
<?xml version= encoding= utf ?>
<!DOCTYPE hibernate mapping PUBLIC //Hibernate/Hibernate Mapping DTD //EN
hiber/hibernate mapping dtd >
<!
Mapping file autogenerated by MyEclipse Persistence Tools
>
<hibernate mapping>
<class name= base mapping VnetTable table= vnet_table >
<id name= id type= java lang String >
<column name= ID length= />
<generator class= uuid hex />
</id>
<property name= vnId type= java lang Long >
<column name= VN_ID >
<ment>创建虚拟网络时得到的ID</ment>
</column>
</property>
…
<property name= zoneId type= java lang String >
<column name= ZONE_ID length= >
<ment>分区ID</ment>
</column>
</property>
<property name= vlanId type= java lang Integer >
<column name= VLAN_ID >
<ment>VLAN_ID</ment>
</column>
</property>
<set name= vnTables lazy= false order by= id asc inverse= false fetch= join cascade= all >
<key column= VN_NID />
<one to many class= base mapping VnTable />
</set>
</class>
</hibernate mapping>
理解inverse和cascade
总结
<one to many>中 建议inverse= true 由 many 方来进行关联关系的维护
<many to many>中 只设置其中一方inverse= false 或双方都不设置
Cascade 通常情况下都不会使用 特别是删除 一定要慎重
操作建议
一般对many to one和many to many不设置级联 这要看业务逻辑的需要 对one to one和one to many设置级联
cha138/Article/program/Java/ky/201311/28554相关参考
Hibernate对多表关联查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于公司项目的需
Java相关:应用数据库Hibernate对多表关联查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
hibernate-HQL语句(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 修改默认查询
hibernate-HQL语句(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查询整个映射
A表 VENID VENNAME 公司 公司B表DOCNO VENID
Hibernate中HQL语句的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文主要使用
HibernateHQL语句的参数设置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以hql举
(一)子查询select*fromtableA whereidoperator(select*fromtableAawhereaid=) operaor 单条记录子查询(
SQL多表查询详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本教程为大家介绍SQL中的
ASP.NET中使用表别名的多表查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一程序功能将