JAVA项目开发笔记(6)Hibernate部分:使用技巧

 Hibernate是比较成熟的技术了,无论是读书,还是网上的文章都很丰富,在这里只列出项目开发中有关hibernate的技巧和问题的解决方法

 

  1. 字段名或表名为SQL关键字:

                如果表名或字段名使用了SQL的关键字那会hibernate生成的sql语句在执行时会出错,如:

                    “在关键字 'key' 附近有语法错误”

                这种问题本不应该出现,应尽量避免使用SQL的关键字做为自定义的名称,出现这种情况最好就是改掉库中使用关键字做表名或字段名的名称。但是有时因为各种原因无法更改时怎么办呢!其实MSSQL中即有自已的解决办法,那就是加包括号([]),所以在使用hibernate时如果遇到这种情况只要修改一下相印的hbm.xml 文件里对印的数据库字段名就好了,例如

  1.         <property name="key" type="java.lang.String">
  2.             <column name="[Key]" length="50" not-null="true" />
  3.         </property>

2.  关与hibernate的seccionfactory和惰性加载

 

        如果使用了Hibernate 的惰性加载并使用了sping来代理DAO类那么在惰性加载时可能出现以下错误

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.com.netgen.model.Student.courses - no session or session was closed
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException

是因为在spring 要求惰性加载数据时hibernate的seccion已经关闭了,在这种情况下可以使用springr 的OpenSessionInViewFilter

有关内容参见(http://blog.youkuaiyun.com/fooe84/archive/2006/04/27/680449.aspx

在你的xml内加入这个过滤器,如果你同我一样未使用的默认的seccionfactory名那么还要给出seccfactory的名子如:

  1.     <filter>
  2.         <filter-name>hibernateFilter</filter-name>
  3.         <filter-class>
  4.             org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  5.         </filter-class>
  6.         <init-param>
  7.             <param-name>sessionFactoryBeanName</param-name>
  8.             <param-value>sessionFactoryInfo</param-value>
  9.         </init-param>
  10.     </filter>
  11.     <filter-mapping>
  12.         <filter-name>hibernateFilter</filter-name>
  13.         <url-pattern>/*</url-pattern>
  14.     </filter-mapping>

注:这里有个问题我的项目中使用了多个数据库,那么要怎么设置,设置两个OpenSessionInViewFilter过滤器分别使用不同的seccionFactory可以吗,有待试验!

 

3.使hibernate连接多个数据库

        连接多个库的问题除了上述的OpenSessionInViewFilter问题,还有一个问题 就是如果两个库中存在相同的表怎样处理。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值