用getHibernateTemplate().save()保存一条记录到表时,字段的默认值无效了,而是为空?添加时我没有set这个字段的值
我用sqlserver的,设置了默认值getdate()

解决方案 »

  1.   

    楼上所说的网址的内容:
    非常的详细!问题描述:
       hibernate技术中对应数据库中每一个表,都会有一个映射文件与之对应,此文件描述数据库表中每一个字段的类型、长度、是否可空等属性。在进行表中记录的插入(更新)操作时,hibernate会根据映射文件中的描述自动生成一个包含所有字段的插入(更新)sql语句,此时如果映射文件中某字段的值为空(NULL)而其在数据库表中定义的默认值不为空,hibernate会将空值插入到表中,而不会使用此字段的默认值。解决方法:
       在hibernate映射文件对数据库表的描述中,加入dynamic-insert="true"和 dynamic-update="true" 语句,这时hibernate在进行插入(更新)操作时,只会为那些值不为空的字段赋值,而值为空的字段就会使用数据库表中定义的默认值了。
    举例说明:
    表person:
    CREATE TABLE person (
     i_id int(11) NOT NULL auto_increment,
     c_name varchar(100) NOT NULL default '张三',
     PRIMARY KEY  (id)
    ) person.hbm.xml:
    <hibernate-mapping package="cn.com.lough.model">
       <class
           name="Person"
           table="person"
           lazy="false"
       >
           <meta attribute="sync-DAO">true</meta>
           <cache usage="read-write"/>
           <id
               name="IId"
               type="integer"
               column="i_id"
           >
               <generator class="native"/>
           </id>       <property
               name="CName"
               column="c_name"
               type="string"
               not-null="false"
               length="128"
           />
    </hibernate-mapping>运行程序
    Person p = new Person();
    HiFactory.save(p);此时hibernate生成的sql语句为insert into person(c_name) values(null);数据库表结果为
    i_id   c_name
    1      null修改person.hbm.xml为:
    <hibernate-mapping package="cn.com.lough.model">
       <class
           name="Person"
           table="person"
           lazy="false"
           dynamic-insert="true"
       >
           <meta attribute="sync-DAO">true</meta>
           <cache usage="read-write"/>
           <id
               name="IId"
               type="integer"
               column="i_id"
           >
               <generator class="native"/>
           </id>       <property
               name="CName"
               column="c_name"
               type="string"
               not-null="false"
               length="128"
           />
    </hibernate-mapping>再次运行程序,此时hibernate生成的sql语句为 insert into person() values();
    数据库表结果为
    i_id   c_name
    1      null
    2      张三
      

  2.   

    多谢,刚接触hibernate,不熟:)