hibernate 映射文件配置默認值方法

問題描述:
    hibernate技術中對應數據庫中每個表,都會有一個映射文件與之對應,此文件描述數據庫表中每個字段的類型、長度、是否可空等屬性。在進行表中記錄的插入(更新)操做時,hibernate會根據映射文件中的描述自動生成一個包含全部字段的插入(更新)sql語句,此時若是映射文件中某字段的值爲空(NULL)而其在數據庫表中定義的默認值不爲空,hibernate會將空值插入到表中,而不會使用此字段的默認值。
java

解決方法:
    在hibernate映射文件對數據庫表的描述中,加入dynamic-insert="true"和 dynamic-update="true" 語句,這時hibernate在進行插入(更新)操做時,只會爲那些值不爲空的字段賦值,而值爲空的字段就會使用數據庫表中定義的默認值了。
sql

這個表引用了另外的一張表。本身任意建立一張表便可。 數據庫

關鍵是hibernate映射文件的class處 dynamic-insert="true" dynamic-update="true" 和property 裏面的insert="false" update="false" 。 app

兩處都要配置! dom

<property></property>標籤: fetch

3.1裏面有一個屬性:update=」true|false」 spa

若是設置爲false,則在hibernate的update語句裏面沒有<property>標籤所指明的屬性所對應的字段。 .net

同理,insert=」true|false」 hibernate

若是設置爲false,則在hibernate的insert語句裏面沒有<property>標籤所指明的屬性所對應的字段。 orm

這樣的弊端是沒法從表單上填寫信息了。

建立數據庫表:

/*
--20、人才招聘.招聘信息表
*/
create table t_company_position(
id integer(10) primary key auto_increment,
company_name varchar(50) not null ,
position_information varchar(500) not null,
position_type varchar(50) ,
position_name varchar(50) ,
province varchar(10) ,
city varchar(10) ,  
start_date timestamp,
in_date varchar(10) default '長期有效',
dimensions varchar(10) , 
position_number varchar(10) not null default '若干名', 
position_salary varchar(30) not null default '面議', 
position_sex varchar(10) not null default '無',
position_age varchar(10) not null default '無',
education varchar(10) not null default '無',
work_experience varchar(10) not null default '無',
work_way varchar(10) not null default '不限',
position_describe varchar(500) not null default '無',
company_describe varchar(1000) not null default '暫無該公司信息', 
contact_way varchar(200) not null default '無', 
company_id integer(10) not null , 
constraint company_id_fk foreign key(company_id) references t_company_regedit(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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.meemei.domain.TCompanyPosition" table="t_company_position" catalog="meemei" 
    dynamic-insert="true" dynamic-update="true" lazy="false">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <many-to-one name="TCompanyRegedit" class="com.meemei.domain.TCompanyRegedit" fetch="select">
            <column name="company_id" not-null="true" />
        </many-to-one>
       
        <property name="companyName" type="java.lang.String">
            <column name="company_name" length="50" not-null="true" />
        </property>
        <property name="positionInformation" type="java.lang.String">
            <column name="position_information" length="500" not-null="true" />
        </property>
        <property name="positionType" type="java.lang.String">
            <column name="position_type" length="50" />
        </property>
        <property name="positionName" type="java.lang.String">
            <column name="position_name" length="50" />
        </property>
        <property name="province" type="java.lang.String">
            <column name="province" length="10" />
        </property>
        <property name="city" type="java.lang.String">
            <column name="city" length="10" />
        </property>
        <property name="startDate" type="java.util.Date">
            <column name="start_date" length="0" />
        </property>
        <property name="inDate" type="java.lang.String" insert="false" update="false" >
            <column name="in_date" length="10" not-null="true"/>
        </property>
        <property name="dimensions" type="java.lang.String" insert="false" update="false" >
            <column name="dimensions" length="10" not-null="true"/>
        </property>
        <property name="positionNumber" type="java.lang.String" insert="false" update="false" >
            <column name="position_number" length="10" not-null="true" />
        </property>
        <property name="positionSalary" type="java.lang.String" insert="false" update="false" >
            <column name="position_salary" length="30" not-null="true" />
        </property>
        <property name="positionSex" type="java.lang.String" insert="false" update="false" >
            <column name="position_sex" length="10" not-null="true"   />
        </property>
        <property name="positionAge" type="java.lang.String" insert="false" update="false" >
            <column name="position_age" length="10" not-null="true" />
        </property>
        <property name="education" type="java.lang.String" insert="false" update="false" >
            <column name="education" length="10" not-null="true" />
        </property>
        <property name="workExperience" type="java.lang.String" insert="false" update="false" >
            <column name="work_experience" length="10" not-null="true" />
        </property>
        <property name="workWay" type="java.lang.String" insert="false" update="false" >
            <column name="work_way" length="10" not-null="true" />
        </property>
        <property name="positionDescribe" type="java.lang.String" insert="false" update="false" >
            <column name="position_describe" length="500" not-null="true" />
        </property>
        <property name="companyDescribe" type="java.lang.String" insert="false" update="false" >
            <column name="company_describe" length="1000" not-null="true" />
        </property>
        <property name="contactWay" type="java.lang.String" insert="false" update="false" >
            <column name="contact_way" length="200" not-null="true" />
        </property>
        <set name="TResume" order-by="id" inverse="true" table="t_company_position">
        <key>
           <column name="company_position_id"></column>
        </key>
        <one-to-many class="com.meemei.domain.TResume"/>
        </set>
    </class>
</hibernate-mapping>

注:insert="false" update="false" 的做用是不對當前字段進行insert和update操做,這樣hibernate就不會在未指明默認列的狀況下將數據庫表中默認值字段清空,但同時也會形成沒法對此字段插入或更新非默認值。

相關文章
相關標籤/搜索