基本配置操作:
http://yafei.iteye.com/blog/799999
inverse属性:
http://www.iteye.com/topic/2633
inverse属性及hibernate其它知识(易理解):
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3479 <class name="org.onetomany.bo.Child" table="CHILD">
<id name="id" column="ID" type="integer">
<generator class="sequence">
<param name="sequence">SEQ_ID</param>
</generator>
</id>
<many-to-one name="parent" class="org.onetomany.bo.Parent" cascade="save-update" column="PARENTID"/>
</class>
<class name="org.onetomany.bo.Parent" table="PARENT">
<id name="parentId" column="PARENTID" type="integer">
<generator class="sequence">
<param name="sequence">SEQ_PAERENTID</param>
</generator>
</id>
<bag name="child" inverse="true" cascade="all">
<key column="PARENTID"/>
<one-to-many class="org.onetomany.bo.Child"/>
</bag>
</class>
Session s=null;
Transaction tx=null;
try{
s=HibernateSessionFactory.getSession();
tx=s.beginTransaction(); //hibernate的事务默认是关闭的,我们必须把他打开。
Parent parent = new Parent();
Child child = new Child();
Child child2 = new Child();
Child child3 = new Child();
List list = new ArrayList();
list.add(child);
list.add(child2);
list.add(child3);
parent.setChild(list);
System.out.println("dddddddddddddddddddddddddddddddddddddddddddddddddddddd");
child.setParent(parent);
child2.setParent(parent);
child3.setParent(parent);
s.save(child);;
s.flush();;
System.out.println("llllllllllllllllllllllllllll");
tx.commit();
}catch(HibernateException e){
if(tx!=null){
tx.rollback();
}
throw e;
}finally{
if(s!=null){
s.close();
}
}
cascade属性:
去掉parent里的cascade="all"
Hibernate: select SEQ_PAERENTID.nextval from dual
Hibernate: insert into PARENT (PARENTID) values (?)
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
ID PARENTID
----------- -----------
74 19
不不去掉parent里的[color=red]cascade="all"
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_PAERENTID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into PARENT (PARENTID) values (?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
llllllllllllllllllllllllllll
ID PARENTID
----------- -----------
74 19
75 19
76 19
去掉parent里的[color=red]inverse="true" 属性
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_PAERENTID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into PARENT (PARENTID) values (?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: update CHILD set PARENTID=? where ID=?
Hibernate: update CHILD set PARENTID=? where ID=?
Hibernate: update CHILD set PARENTID=? where ID=?
llllllllllllllllllllllllllll
ID PARENTID
----------- -----------
74 19
75 19
76 19
多了三次update ,存在性能问题
改成如下代码:
Session s=null;
Transaction tx=null;
try{
s=HibernateSessionFactory.getSession();
tx=s.beginTransaction(); //hibernate的事务默认是关闭的,我们必须把他打开。
Parent parent = new Parent();;
Child child = new Child();;
Child child2 = new Child();;
List list = new ArrayList();;
list.add(child);;
list.add(child2);;
parent.setChild(list);;
s.save(parent);;
s.flush();;
System.out.println("dddddddddddddddddddddddddddddddddddddddddddddddddddddd"); ;
Child child3 = new Child();;
child3.setParent(parent);;
// child.setParent(parent);
// child2.setParent(parent);
s.save(child3);;
// s.save(child);;
// s.save(child2);;
System.out.println("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); ;
tx.commit();
}catch(HibernateException e){
if(tx!=null){
tx.rollback();
}
throw e;
}finally{
if(s!=null){
s.close();
}
}
去掉parent里的[color=red]inverse="true" 属性
Hibernate: select SEQ_PAERENTID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into PARENT (PARENTID) values (?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: update CHILD set PARENTID=? where ID=?
Hibernate: update CHILD set PARENTID=? where ID=?
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
Hibernate: select SEQ_ID.nextval from dual
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
ID PARENTID
----------- -----------
74 19
75 19
76 19
不去掉parent里的[color=red]inverse="true" 属性
Hibernate: select SEQ_PAERENTID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into PARENT (PARENTID) values (?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
dddddddddddddddddddddddddddddddddddddddddddddddddddddd
Hibernate: select SEQ_ID.nextval from dual
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Hibernate: insert into CHILD (PARENTID, ID) values (?, ?)
ID PARENTID
----------- -----------
74 -
75 -
76 19
分享到:
相关推荐
Hibernate中cascade与inverse属性详解
hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。
hibernate inverse和cascade的详细讲解,相当详细全面的对inverse和cascade区别和用法的讲解
Hibernate中Cascade和inverse的区别,讲解的很详细
NHibernate Inverse & Cascade
于Hibernate中 cascade 与 inverse 的理解。 您买的Hibernate书是哪一本呢? 孙卫琴的精通Hibernate,还是 深入浅出Hibernate还是那本。。。 我是两本都买了,总体来说还可以,但是,有的地方讲的比较书面化,比如...
关于cascade和inverse属性[文].pdf
NULL 博文链接:https://dtfy56924.iteye.com/blog/363917
Hibernate中cascade和inverse应用
该源程序代码可以帮助初学者迅速建立hibernate的关联映射的概念,且详细的讲解了cascade和inverse的用法,程序代码进行了详尽的描述,通俗易懂,容易上手
Hibernate中Inverse和Cascade的区别.html
inverse Hibernate_级联关系说明_-_关于cascade和inverse的用法
hibernate集合映射inverse和cascade详解.txt
Hibenate cascade 介绍 inverse介绍
深入理解hibernate many-to-one(多对一)及 cascade(级联).
haarcascades\haarcascade_eye.xml haarcascades\haarcascade_eye_tree_eyeglasses.xml haarcascades\haarcascade_frontalface_alt.xml haarcascades\haarcascade_frontalface_alt2.xml haarcascades\haar...
haarcascade_eye.xml haarcascade_eye_tree_eyeglasses.xml haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haar...
OpenCV+python:人脸检测时人脸识别xml文件:haarcascade_frontalface_default.xml,haarcascade_frontalface_alt2.xml,haarcascade_eye.xml等文件下载
haarcascade_upperbody.xml