文档章节

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

猴亮屏
 猴亮屏
发布于 2015/07/18 23:37
字数 1004
阅读 870
收藏 7

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

本文转载自:http://open023.iteye.com/blog/1102018

猴亮屏

猴亮屏

粉丝 37
博文 542
码字总数 60882
作品 4
北京
Android工程师
私信 提问
org.hibernate.Exception

1、org.hibernate.ObjectNotFoundException: No row with the given identifier exists: 原因可能是POJO映射文件中的字段和数据库里表的字段不匹配(不一致)。另外还有一种可能就是表A与表B之...

街头浪子
2016/03/29
37
0
Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibern

Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置 spring对hibernate配置文件hibernate.cfg.xml的集成相当好,可以在Spring中配置Hibernate的SessionFact...

我的小确幸日记
2016/05/10
281
1
spring整合hibernate配置文件

Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置 spring对hibernate配置文件hibernate.cfg.xml的集成相当好,可以在Spring中配置Hibernate的SessionFact...

lovedreamland
2014/04/01
10.2K
0
Spring入门到精通Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库。 一、Spring JDBC (详细配置:http://my.oschina.net/wangning0535/blog/535590?fromerr=MIriquMm) 1、配置数据源 Da...

Winnie007
2015/10/20
154
0
Hibernate3简单总结part1

Hibernate3简单总结 1. 简单概念 hibernate是位于数据层(持久层)的框架。主要用于封装对数据的操作 hibernate 作用是将面向关系型数据库的操作,转换成面向对象的操作 因此,需要有数据库与...

我是小个子啊
2016/04/19
17
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
4
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
9
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
7
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
8
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部