我做了一个教师与学生的一对多的双向关联关系,在对教师进行删除发现hibernate对学生表是一条一条的删,这样太慢了,能不能批量删除。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
<class name="com.qh.domain.Student" table="student" schema="dbo">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="studentName" type="java.lang.String">
<column name="studentName"/>
</property>
<many-to-one name="teacher" column="teacher_id" class="com.qh.domain.Teacher"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
<class name="com.qh.domain.Teacher" table="teacher" schema="dbo">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="teacherName" type="java.lang.String">
<column name="teacherName"/>
</property>
<set name="students" inverse="true" fetch="select" cascade="delete" lazy="false">
<key column="teacher_id"/>
<one-to-many class="com.qh.domain.Student"/>
</set>
</class>
</hibernate-mapping>Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, new Integer(10));
if(t==null){
System.out.println("不存在该教师");
} else {
session.delete(t);
}
tx.commit();
HibernateSessionFactory.closeSession();生成的sql语句如下:
Hibernate:
select
teacher0_.id as id1_0_,
teacher0_.teacherName as teacherN2_1_0_
from
dbo.teacher teacher0_
where
teacher0_.id=?
Hibernate:
select
students0_.teacher_id as teacher3_1_,
students0_.id as id1_,
students0_.id as id0_0_,
students0_.studentName as studentN2_0_0_,
students0_.teacher_id as teacher3_0_0_
from
dbo.student students0_
where
students0_.teacher_id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.teacher
where
id=?这是在后面的删除学生表时hibernate能不能直接delete from student where teacher_id=?这样呢
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
<class name="com.qh.domain.Student" table="student" schema="dbo">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="studentName" type="java.lang.String">
<column name="studentName"/>
</property>
<many-to-one name="teacher" column="teacher_id" class="com.qh.domain.Teacher"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
<class name="com.qh.domain.Teacher" table="teacher" schema="dbo">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="teacherName" type="java.lang.String">
<column name="teacherName"/>
</property>
<set name="students" inverse="true" fetch="select" cascade="delete" lazy="false">
<key column="teacher_id"/>
<one-to-many class="com.qh.domain.Student"/>
</set>
</class>
</hibernate-mapping>Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, new Integer(10));
if(t==null){
System.out.println("不存在该教师");
} else {
session.delete(t);
}
tx.commit();
HibernateSessionFactory.closeSession();生成的sql语句如下:
Hibernate:
select
teacher0_.id as id1_0_,
teacher0_.teacherName as teacherN2_1_0_
from
dbo.teacher teacher0_
where
teacher0_.id=?
Hibernate:
select
students0_.teacher_id as teacher3_1_,
students0_.id as id1_,
students0_.id as id0_0_,
students0_.studentName as studentN2_0_0_,
students0_.teacher_id as teacher3_0_0_
from
dbo.student students0_
where
students0_.teacher_id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.student
where
id=?
Hibernate:
delete
from
dbo.teacher
where
id=?这是在后面的删除学生表时hibernate能不能直接delete from student where teacher_id=?这样呢
解决方案 »
- 关于ant工具包打包zip文件乱码的问题
- 求FCKeditor-2.3.jar的源码~~~~
- 一个复杂的多表关联的条件查询!
- 求教一个struts2的<iterator>标签问题,希望迭代的索引从第二个元素开始,请高手指教。在线等。。。
- 文件上传问题,帮兄弟看看,给100分
- 用过installanywhere的进来帮下忙
- eclipse中middlegen-hibernate中的两个配置文件
- java api 英文
- SSH整合出现的麻烦
- 请问在Tomcat5.5.9中始终无法正确配置datasource时我该怎么办啊~~?
- struts2 验证框架 传参数问题
- 一个超级简单的struts,Action1中的转向为什么都是"success"呢?
public int deleteBrands(Long[] delBrandId){
Session session = getSession();
Transaction tx = session.beginTransaction();
StringBuffer sql = new StringBuffer();
sql.append("delete Brand where brandId in ( :brandId) ");
Query query = session.createQuery(sql.toString());
query.setParameterList("brandId",delBrandId);
int dels = query.executeUpdate();
tx.commit();
return dels;
}可以这样。但是直接通过Hibernate进行批量更新和批量删除都不值得推荐,
因为hibernate在批量更新和删除上没有什么优势