`
安之若素
  • 浏览: 144862 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

用hibernate时怎么保留默认值

    博客分类:
  • java
阅读更多

问题描述: 
     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             张三

 

 

分享到:
评论

相关推荐

    hibernate实体映射文件字段设置默认值

    ### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

    使用dom4j生成和读取hibernate.cfg.xml

    在IT行业中,XML文件是常用于配置和存储...理解并熟练使用DOM4J对于进行Java XML处理至关重要,尤其是在涉及到如Hibernate这样的持久层框架时。通过不断的实践和学习,开发者可以更好地驾驭XML配置文件,提升开发效率。

    Hibernate 参数配置详解

    - **描述**:用于指定 Hibernate 针对特定关系数据库生成 SQL 语句时使用的方言。不同的数据库可能有不同的 SQL 语法和特性支持,因此正确配置方言至关重要。 - **取值**:应设置为数据库对应的 `org.hibernate....

    Hibernate 参数设置一览表.doc

    3. **hibernate.jdbc.batch_versioned_data**:当开启时,Hibernate会为自动版本化的数据使用批量DML操作,以提高性能。 4. **hibernate.jdbc.factory_class**:允许自定义Batcher实现,但大多数情况下无需更改默认...

    让hibernate输出sql语句参数配置.doc

    hibernate.use_identifer_rollback 参数用于如果开启,在对象被删除时生成的标识属性将被重设为默认值。其取值为 true 或 false。 13. hibernate.use_sql_comments hibernate.use_sql_comments 参数用于如果开启,...

    hibernate

    这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下使用Hibernate框架进行数据库操作时。 ### Hibernate Fetch 模式 在Hibernate中,Fetch模式用于控制关联数据的加载方式。主要有两种取值:`...

    关于hibernate的批处理

    10. **JDBC批处理API**: Hibernate底层使用JDBC的批处理API(Statement.addBatch()和Statement.executeBatch()),用户也可以直接使用JDBC批处理,绕过Hibernate的部分逻辑,获取更高的性能。 11. **性能优化注意...

    Tomcat下配置Hibernate

    - `hbm2ddl.auto`:设置Hibernate在启动时对数据库表的操作模式,常见的值有`create`(每次启动都重新创建表)、`update`(更新表结构,如果存在则忽略)等。 - `current_session_context_class`:设置当前线程中...

    Hibernate3的配置参数汇总

    - `hibernate.connection.username`和`hibernate.connection.password`:数据库用户的凭证(在使用JNDI数据源时可选)。 4. **其他可选的Hibernate配置属性**: - `hibernate.dialect`:指定对应数据库的方言,如...

    hibernate参数配置

    11. **hibernate.use_identifier_rollback**: 开启后,删除对象时,其标识属性会被重置为默认值。 12. **hibernate.use_sql_comments**: 如果设置为`true`,Hibernate将在SQL中添加注释,便于调试。 **Hibernate ...

    hibernate使用c3p0连接池的资料

    ### hibernate使用c3p0连接池的知识点详解 #### 一、Hibernate与C3P0连接池概述 - **Hibernate**: 是一个全功能的Java持久层框架,它提供了对象关系映射(ORM)功能,使得Java应用可以方便地与数据库进行交互。...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...

    hibernate-annotations.jar

    对于`hibernate-annotations.jar`来说,这意味着它遵循的可能是Apache License 2.0、LGPL或其他开源许可,这意味着该库可以免费用于商业项目,但需要遵守特定的条款,如保留原有版权信息、公开源代码等。 综上所述...

    Hibernate element使用

    7. **懒加载(Lazy Loading)**:Hibernate支持延迟加载机制,允许在需要时才加载关联的对象,以提高性能。这通常通过`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解的`fetch`属性设置。 8. **缓存(Caching)**...

    hibernate-mapping参数详解

    默认值是`property`,意味着Hibernate将使用getter和setter方法来读写属性。如果自定义了访问策略,可以通过实现`PropertyAccessor`接口来指定。 2. `default-lazy`:默认情况下,未显式指定`lazy`属性的Java属性和...

    Hibernate3.4 不自动创建索引的问题

    本文主要探讨的是在使用Hibernate框架时遇到的“Hibernate3.4 不自动创建索引的问题”。Hibernate是一个优秀的对象关系映射(ORM)框架,它允许开发者用Java对象的方式来操作数据库,而无需过多关注SQL的细节。然而...

    Hibernate 注解映射

    * @GeneratedValue:指定 OID 的生成策略,默认值是 GenerationType.AUTO,相当于 xml 时的 native。 * @Version:映射版本号属性,用于乐观锁。 * @Column:指定属性对应列的信息,包括列名、是否可为空、是否唯一...

    Hibernate延迟加载以及利用Spring

    - `fetch="select"`:默认值,表示在查询`Emp`时不会立即加载`Dept`,而是通过单独的SQL查询来加载`Dept`。 #### 三、Spring框架下的Hibernate使用案例 在给定的内容中,展示了如何在Spring框架下使用Hibernate。...

    hibernate注解说明文档

    - **hilo**:在数据库中建立一张额外的表,默认表名为`hibernate_unique_key`,字段为`next_hi`(比较少用)。 - **assigned**:在插入数据时主键由程序处理,这是默认生成策略,等同于JPA中的`AUTO`。 这些注解...

Global site tag (gtag.js) - Google Analytics