关于hibernate映射视图若干问题小结(转)

使用MyEclipse hibernate 视图对ORACLE的视图进行映射反向生成,比如对ViewResult视图会生成两个类,一个hbm.xml文件,其中两个类名为:ViewResultId和ViewResult 配置文件为ViewResult.hbm.xml。那么使用HibernateTemplate模板类使用find(hql)进行查询的时候,比如hql="from ViewResult v where v.name='lx'";那么会出现第一个异常(异常内容明天补上。。。)原因是:视图没有主键,MyEclipse默认生成的是复合主键,即<composite-id><key-property></key-property></composite-id>。id由ViewResult类生成,于是将hql修改为:hql="from ViewResult v where v.id.name='lx'";发现可以进行查询不会报错了,但是却又发现查询的内容为null,这是第二个异常,原因为:MyEclipse默认生成的复合主键,<composite=id></composite-id>中间包括了视图所有的属性都为复合主键即<key-property>属性</key-property>,因为查询的记录里面某个字段为null,而主键不能为空,所以导致查询的记录全部都null,修改方法为:将视图中可以作为主键的属性放入<composite-id></composite-id>中,其余的放在外面修改为<property/>,这个时候查询又会出现,缺少get或者set方法的异常,所以最终的解决方法就是:把视图当成一个表,按hibernate常规思路进行配置即可解决,配置主键生成策略(视图没有主键,但是你可以根据业务需求找出一个可以当做主键的属性值),然后配置属性,这样就可以把视图当成一个实体用hql来查询了。
ps:HibernateTemplate模板没有提供分页的查询,只提供了setMaxResults(int)方法设置每页显示记录数,但是没有提供setFirstResult(int)设置从哪一行开始查询,所以使用了doInhibernate(HibernateCallback)进行接口回调直接使用session进行设置查询。当出现上述问题时候还以为是session关闭,使用了opensessionview过滤 但仍然报错,最后还是映射问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值