关于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来查询了。


还有种说法是说把视图里面所有null的值填个默认值也能解决查询为null的问题。


所以总结出对视图的操作办法:

1.把视图当一个表来配置,在视图中找一个合适的字段来当主键就行。

2.把视图中所有null的字段都默认给个值,这样用myeclipse那种联合主键配置的方式也能查询到数据(此方法在网上查的自己没试)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值