论坛首页 Java企业应用论坛

Hibernate映射文件配置技巧

浏览 2174 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-13   最后修改:2010-02-02

   很多人在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,希望知道的高手指教一下,呵呵...

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics