问题描述:
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就不会在未指明默认列的情况下将数据库表中默认值字段清空,但同时也会造成无法对此字段插入或更新非默认值。
分享到:
相关推荐
首先,我们需要了解一个基本的Hibernate映射文件结构: ```xml <hibernate-mapping> <!-- 映射类的属性 --> </hibernate-mapping> ``` 这里的`<class>`标签表示映射到特定的Java类,其属性`name`指定了对应的...
Hibernate映射文件是XML格式的文件,它定义了数据库表与Java实体类之间的对应关系,包括字段映射、主键策略、关联关系等。映射文件让开发者无需编写SQL语句,就能通过Java对象进行数据库操作。 2. **MyEclipse ...
描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构及其组成部分,包括主键(id)、普通属性(property)等关键元素的配置方法和策略。 ### Hibernate映射文件配置详解 在...
3. **逆向工程(Hibernate Reverse Engineering)**:选中要映射的数据库表,右键选择`Hibernate Reverse Engineering`,这是MyEclipse提供的将数据库表转换为Hibernate映射文件和实体类的工具。 4. **配置生成选项...
`hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...
Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...
### MyEclipse自动生成Hibernate映射文件 #### 一、概述 在开发基于Java的Web应用时,ORM(对象关系映射)框架如Hibernate能够极大地提高数据持久化的效率及便捷性。MyEclipse是一款功能强大的集成开发环境,支持...
Hibernate映射文件是Hibernate框架中用于定义对象-关系映射(ORM)的重要组成部分。它将Java类与数据库表之间的关系进行详细配置,使得程序能够透明地操作数据库。映射文件通常使用XML格式,并以`.hbm.xml`为扩展名...
### 深入理解Hibernate...总之,Hibernate映射文件是实现对象关系映射的核心组件之一,通过对映射文件的合理配置,可以高效地完成Java对象与数据库表之间的映射,从而简化数据库操作并提高代码的可维护性和可扩展性。
#### Hibernate映射文件与配置关系 Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。映射文件通常是`.hbm.xml`格式...
在SSH中,映射文件配置是管理不同系统间文件传输、资源共享的关键环节。本笔记将详细介绍SSH映射文件配置的三个核心部分:基础配置参数使用、多对一映射以及一对多映射。 **基础配置参数使用** SSH的基础配置通常...
Hibernate 映射文件 id 的 generator 配置方法 Hibernate 映射文件 id 的 generator 配置方法是 Hibernate 框架中的一种重要配置,用于生成持久化类实例的唯一标识符。下面将对 Hibernate 映射文件 id 的 generator...
### Hibernate映射文件基础结构 映射文件通常以`<!DOCTYPE hibernate-mapping>`开头,引用DTD(文档类型定义),确保文件遵循正确的格式。例如: ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/...
首先,Hibernate的反向工程(Reverse Engineering)功能可以帮助开发者从现有的数据库中生成实体类、持久化映射文件(.hbm.xml)以及相关的配置文件。这极大地简化了数据访问层的开发工作,因为无需手动编写这些繁琐...
Spring提供了`LocalSessionFactoryBean`用于配置基于XML的Hibernate映射,而`AnnotationSessionFactoryBean`则用于处理基于注解的映射。这两个类分别处理不同的映射方式,所以默认情况下,它们不能直接共存于同一个...
配置文件是Hibernate的核心部分,它定义了与数据库的连接、实体类的映射以及缓存策略等关键设置。 **1. Hibernate配置文件(hibernate.cfg.xml)** Hibernate的配置文件通常命名为`hibernate.cfg.xml`,并放置在...
`hibernate.properties`是Hibernate的核心配置文件,用于设定与数据库连接、缓存策略、事务管理等相关的重要参数。下面我们将详细探讨这个配置文件中的关键知识点。 1. **数据库连接配置** - `hibernate....
综上所述,Hibernate映射集合属性List是通过注解或XML配置来实现的,它可以简化数据库操作,使代码更专注于业务逻辑。自动创建表功能则进一步简化了开发流程,而集合操作和懒加载策略则优化了性能。在实际项目中,...
在 Hibernate 中,`user_roles` 表可以通过在两个实体的 hbm.xml 文件中添加 `many-to-many` 标签来配置。 `User.hbm.xml` 示例: ```xml <hibernate-mapping> </hibernate-mapping> ``` `...
总结来说,XDoclet和Ant在Java开发中扮演着重要角色,前者简化了Hibernate映射文件的管理,后者则为项目构建和自动化提供了强大支持。通过合理的利用这两者,开发者可以提高工作效率,降低出错概率,使项目管理更加...