Hibernate 小结


在控制台显示HQL语句
<property name="show_sql">true</property>
----------------------------------------------------------
hibernate里面有四个参数比较重要
cascade 有四个取值:none all save-update delete

------------------------------
1 第一种查询

from Cat cat where cat.mate.name like "kit%"
相当于:
select * from cat_table as table1 cat_table as table2 where table1.mate =
table2.id and table1.name like "kit%"
from Foo foo where foo.bar.baz.customer.address.city like"guangzhou%"
四表连接查询
-------------------------------------------------------
2 第二种查询
//String hql="select u from po.Users u,po.Useradd ua where u=ua.users and ua.address='beijing'";
//String hql="select u from po.Users u,po.Useradd ua where  ua.address='beijing'";
----------------------------
3 fetch的用法
lazy="false" fetch="select" 执行多条hql语句,延迟加载不起作用。
lazy="true" fetch="select" 执行多条hql语句,延迟加载起作用。
lazy="true" fetch="join" 写在一的方面,对get方法起作用,只执行一条查询语句。对hql语句不起作用。
可以在hql语句中强制抓取
from Users u join fetch u.useradds
//注意:这种强行抓取,如果以子表类条件返回主表对象,有几个子表类对象会返回多少个主表类对象。
//可以采用Set集合保存对象或做程序去掉重复项的方式处理。
但可以在hql语句种增加String hql="from Users u join fetch u.useradds";即使设置延迟加载
也可以把子表数据强行取出来.
结论: 1 HQL代码 > fetch(配置) > lazy (配置)
         注意:如果查询涉及两个表,已经自动加载了
       2 fetch 和 lazy 主要是用来级联查询的,   而 cascade 和 inverse 主要是用来级联插入和修改的
       3 默认 lazy="true"
       4 cascade用来操作主表的时候影响到子表的类。
       5 老爸可以有多个孩子,一个孩子不能有多个老爸,而且老爸说的算, 孩子围着老爸转。
                所以Photos老爸要有权力所以 cascade 这个关键子都是送给老爸的, 也就是级联更新,
               老爸改姓了,儿子也得跟着改,呵呵。“不然,就没有零花钱咯”。
                而Picture儿子整体挨骂,但是还是要维护父子之间良好的关系,对老爸百依百顺,所
               以老爸就说,儿子,“关系,由你来维护(inverse="true") ,不然就不给零花钱。呵。”。
               <set name="pictures" inverse="true" cascade="all">
                    <key>
                       <column name="photosid" not-null="true" />
                    </key>
                 <one-to-many class="girl.domain.Picture" />
             </set>
posted @ 2010-12-20 22:06  左正  阅读(203)  评论(0编辑  收藏  举报