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

问题描述:
    hibernate技术中对应数据库中每一个表,都会有一个映射文件与之对应,此文件描述数据库表中每一个字段的类型、长度、是否可空等属性。在进行表中记录的插入(更新)操作时,hibernate会根据映射文件中的描述自动生成一个包含所有字段的插入(更新)sql语句,此时如果映射文件中某字段的值为空(NULL)而其在数据库表中定义的默认值不为空,hibernate会将空值插入到表中,而不会使用此字段的默认值。

解决方法:
    在hibernate映射文件对数据库表的描述中,加入dynamic-insert="true"和 dynamic-update="true" 语句,这时hibernate在进行插入(更新)操作时,只会为那些值不为空的字段赋值,而值为空的字段就会使用数据库表中定义的默认值了。

这个表引用了另外的一张表。自己任意创建一张表即可。

关键是hibernate映射文件的class处 dynamic-insert="true" dynamic-update="true" 和property 里面的insert="false" update="false" 。

两处都要配置!

<property></property>标签:

3.1里面有一个属性:update=”true|false”

如果设置为false,则在hibernate的update语句里面没有<property>标签所指明的属性所对应的字段。

同理,insert=”true|false”

如果设置为false,则在hibernate的insert语句里面没有<property>标签所指明的属性所对应的字段。

这样的弊端是无法从表单上填写信息了。

创建数据库表:

/*
--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就不会在未指明默认列的情况下将数据库表中默认值字段清空,但同时也会造成无法对此字段插入或更新非默认值。

时间: 2024-11-07 08:01:21

hibernate 映射文件配置默认值方法的相关文章

Hibernate映射文件配置(hbm.xml和注解方式)

一:通过*.hbm.xml配置实体的实现方式 mappingResources用于指定少量的hibernate配置文件像这样 Xml代码 <property name="mappingResources"> <list> <value>WEB-INF/conf/hibernate/cat.hbm.</value> <value>WEB-INF/conf/hibernate/dog.hbm.</value> ....

生成 hibernate 映射文件和实体类

创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 创建数据库,创建相应的表   点击图标,选择MyEclipse Datebase Explorer   右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb是我创建的数据库连接   选择需要添加hibernate映像文件的工程右击--->MyEclipse-->Ad

用Spring的mappingDirectoryLocations来配置Hibernate映射文件

在Spring的applicationContext.xml中配置映射文件的方法: <property name="mappingResources"> <list> <value>com/almaer/model/Person.hbm.xml</value> <value>com/almaer/model/Car.hbm.xml</value> <value>com/almaer/model/Engi

hibernate 关系映射文件配置

<!--Department.hbm.xml users属性,本类与User的一对多 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User" /> </set> <!-- parent属性,本类与Department(上级)的多对一 --> <man

Hibernate映射文件如何配置触发器

Hibernate映射文件之触发器生成(generated属性.database-object元素) (2013-02-27 12:28:49) 转载▼ 标签: it 分类: JAVA学习笔记 这里分两个Project: 第一个Project: 通过映射文件的database-object来创建数据表.触发器 1. 创建两个.java文件: CreateTable.java和CreateTrigger.java,里面只需有个类名就行,目的是要创建对应的映射文件CreateTable.hbm.xm

Hibernate 映射文件详解

Hibernate 映射文件详解 2010-09-02 19:03:33|  分类: Hibernate学习|举报|字号 订阅 Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义. 一.根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性 1)package:指定一个包

Hibernate映射文件生成器by LDDXFS

本文由 http://www.cnblogs.com/LDDXFS/ 原创,转载请注明本文出处,邮件LDDXFS#qq.com. 1作用 它根据properties文件上定义的参数得到多个 Domain.java文件 依据可修改的xml模板文件生成Hibernate的映射文件 Domain.hbm.xml 可以提取字段上的doc注释到Domain.hbm.xml文件对应的配置上 支持的关联关系有 一对一,一对多Set List,多对一. 最终 生成的hbm.xml文件如下 1 <?xml ver

Hibernate映射文件详解(News***.hbm.xml)一

Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=POJO+映射文件 根据体系结构视图可以了解到整个利用Hibernate框架实现的项目包括整个重要的配置文件: Hibernate配置文件:实现Hibernate基础配置,是Hibernate能够友好的与DB进行交互基础: 开发时放置src目录下,取名为:hibernate.cfg.xml(hiber

深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select.resultMap的用法.select无疑是我们最常用,也是最复杂的,mybatis通过resultMap能帮助我们很好地进行高级映射.下面就开始看看select 以及 resultMap的用法: 先看select的配置吧: <select <!-- 1. id (必须配置) id是命名空间中的