Hibernate持久化映射文件配置说明

在Hibernate项目中,需要对pojo实体对象与对应的数据库表做持久化映射。如下:

数据库表的定义:

CREATE TABLE `experience` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` CHAR(20) NOT NULL COMMENT '用户名',
  `time` VARCHAR(50) NOT NULL COMMENT '工作年限',
  `company` VARCHAR(50) NOT NULL COMMENT '工作所在公司名',
  `kind` VARCHAR(20) NOT NULL COMMENT '工作种类',
  `content` VARCHAR(200) DEFAULT NULL COMMENT '详细描述',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='求职者工作经验表表'

 

对应的pojo实体类为:

public class Experience implements Serializable{

    /**  */
    private static final long serialVersionUID = 1284270858555832898L;
   
    private Integer experienceId;
    private  String username;   // CHAR(20) NOT NULL COMMENT '用户名',
    private Date time;   //  VARCHAR(50) NOT NULL COMMENT '工作年限',
    private  String company;   //  VARCHAR(50) NOT NULL COMMENT '工作所在公司名',
    private  String kind;   //  VARCHAR(20) NOT NULL COMMENT '工作种类',
    private  String content;   //  VARCHAR(200) NOT NULL COMMENT '详细描述',
    
    // setter,getter方法省略

}

 

它们之间的映射文件如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="experience">
 <class name="com.ssh.model.Experience" table="experience" discriminator-value="experience">
  <id name="experienceId" column="id">
   <generator class="native" />
  </id>
  
  <property name="username" not-null="true" type="string" update="false"/> (1)
  <property name="time" type="date" update="false" />
  <property name="company" type="string" update="false" />
  <property name="kind" type="string" update="false" />
  <property name="content" type="string"/>
  
 </class>
</hibernate-mapping>

 

(1)处的配置进行说明:

not-null="true"表明属性username不能为空(插入操作时),在对实体类Experience进行持久化操作(插入)之前,Hibernate会对username属性进行检查。如果username为空在进行插入操作时,会报异常(但不会报SQLEexception,因为Hibernate会在执行sql语句之前,根据not-null的配置先进行检查)。而如果not-null="false"话,username为空就会报SQLEexception,因为not-null的值为false,Hibernate的不会对属性username进行检查,而是直接进行sql操作;而表的定义中username字段不能为空,所以会报SQLEexception。

 

update="false"表明此属性对应的字段(即username字段)在进行更新操作时,不会对此字段进行更新。注意:如果update="false"而且not-null="true",那么在更新操作时,Hibernate会在执行sql语句之前,忽略对username属性是否为空的检查,而是在执行了sql语句之后才会报SQLEexception。而如果update="true"而且not-null="true"时,Hibernate会在执行sql语句之前会先行对属性username是否为空进行检查。

 

小结:

1.有此可见配置update="true"或者update="false"(默认update="true")对插入操作,不起作用,只对更新操作起作用。

2.如果配置not-null="true"(默认not-null="false")的话,会增加系统开销,使得在执行sql语句之前,Hibernate会对属性是否为空进行检查。

posted @ 2011-03-10 18:58  hibernate3例子  阅读(157)  评论(0编辑  收藏  举报