`

Hibernate映射文件配置技巧

阅读更多

   很多人在java项目开发的时候,在处理数据库时都会用到数据库映射工具--Hibernate,而对Hibernate的配置文件(.hbm文件)都有所接触,但能够适当配置hbm需要相当的积累。或许Hiberntae还存在很多Bug吧,呵呵,还有待改进。

  在java的PoJo类与数据库进行映射的时候,有时候数值型数据,如Int,Float,Double等在insert或者Update操作的时候会遇到Null值的情况,这时候会产生Exception信息:

  null value was assigned to a property of primitive type setter of

  不知道这种情况怎么解决,最笨的办法就是在数据库里写触发器,但是这个太麻烦

  不知道能不能在Hibernate的配置文件中设置默认值,上网google了一下,查到以下内容:

 

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中<property 元素中的update属性设置成为false,那么这个字段,将不被包括在基本的update语句中,修改的时候,将不包括这个字段了.insert同理.dynamic动态SQL语句的配置也是很常用的.下面介绍配置SQL语句的具体属性:
      1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true
      2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
      3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true
      4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false
      5)<property>元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false
      6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false
      7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false

      Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.

 

     但是我在Property属性中设置了dynamic-insert和dynamic-update,启动tomcat服务器发现编译出错,于是将这段话(dynamic-insert="true" dynamic-update="true")放在了class中(注:这两种配置是不一样的,写在Property属性中表示是对这个字段起作用,而放在class是表示对类的所有字段起作用),配置代码如下:

   ...

<class name="view" tablename="view" dynamic-insert="true" dynamic-update="true" />

<property name="filed"  type="java.lang.Double">

<column   name="filed" sql-type="number(1);default 0" >

</column>

</property>

  ... 

    而且还要将Pojo的类型改为对应的类包装类型(java.lang.Interger ,java.lang.Double等,或者省略为Interger和Double)

 

注意,修改了java代码之后,必须得restart tomcat服务,否则运行还是上次的代码

待代码修改完毕之后,启动tomcat,终于正常了。

不过似乎存在一点问题,不管你的sql-type="number(1);default 0"怎么设置默认值,它都是0,希望知道的高手指教一下,呵呵...

 

分享到:
评论

相关推荐

    Hibernate使用技巧汇总

    两种配置文件: A.hibernate.cfg.xml 和 B.hibernate.properties A中可含映射文件的配置,而B中hard codes加映射文件。 A。Configuration config=new Configuration().config(); B. ...

    彻底解决hibernate常见难点.zip

    N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在Spring中、事务...

    hibernate 体系结构与配置 参考文档(html)

    映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用 ...

    Hibernate+中文文档

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用 ...

    Hibernate 中文 html 帮助文档

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    hibernate 教程

    映射文件的模块化(Modular mapping files) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent Collections) 6.2. 映射集合(Mapping a Collection) 6.3. 值集合和多对多关联(Collections of...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建...

    hibernate3.2中文文档(chm格式)

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    HibernateAPI中文版.chm

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    Hibernate中文详细学习文档

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    Hibernate教程

    2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 ...

    最全Hibernate 参考文档

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    精通Hibernate:对象持久化技术第二版part3

    2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建...

    Hibernate逍遥游记.pdf

    《Hibernate逍遥游记》主要介绍通过Hibernate API来访问数据库的方法,还介绍把Java对象模型映射到关系数据模型的各种技巧、处理并发问题及实现对话的种种方案。《Hibernate逍遥游记》将帮助读者编写出具有合理的...

Global site tag (gtag.js) - Google Analytics