ITEEDU

Hibernate Gossip: 自定义 insert、update、delete

Hibernate 3的映射文件中新增了<sql-insert>、<sql-update>与<sql-delete>三个标签,您 可以在这三个标签中使用SQL自定义您的INSERT、UPDATE、DELETE,也就是储存、更新、删除数据时的行为,例如:
User.hbm.xml
<?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="onlyfun.caterpillar.User" table="user">

<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>

<property name="name" column="name" type="java.lang.String"/>

<property name="age" column="age" type="java.lang.Integer"/>

<sql-insert>
INSERT INTO user (name,age) VALUES (?, ?)
</sql-insert>
<sql-update>
UPDATE user SET name=?, age=?, WHERE id=?
</sql-update>
<sql-delete>
DELETE FROM user WHEREid=?
</sql-delete>

</class>

</hibernate-mapping>

? 对应的顺序是映像文件中属性出现的顺序,假设您储存对象:
session = sessionFactory.openSession();
tx = session.beginTransaction();

session.save(user);
tx.commit(); 
session.close();
则执行结果中显示的SQL语句会是您自定义的语句,而不是由Hibernate自动生成的语句:
Hibernate:
        INSERT INTO user (name, age) VALUES (?, ?)