Hibernate中引用View的解决方案_来自一网友

一、思路
问题:
以往用Hibernate处理View时发生的困难主要集中在这两方面:
View是没有主键
由于View是由select语句生成,所以不存在任何主键。 也就无法对其映射。
Hibernate必须对要操作的表进行po封装
Hibernate要求对数据库的操作都是通过pojo映射来实现的。也就是说无法对某个 View直接读取而不对其进行映射。

如果强制用hibernate反转,会将所有的字段变成一个复合主键,关键是根本查不出数据来!
解决:
要解决以上问题,我采取一下方案:
在建立 View的时候生成类似主键的字段,通过其他手段建立类似主键的字段。 并不需要另外建立这个主键!!!

在用Hibernate反转后,将复合主键po文件中构建器及geter/seter拷贝至主po文件中。同时修改相应的hbm.xml文件,手动随便把任一字段改为主键即可。
二、实现
建立视图

代码
  1. createorreplaceviewv_user_perm
  2. ( id, userid,moduleid)其实id并不需要!
  3. as
  4. selectrownum,a.id,c.id
  5. fromsysusera,user_permb,modulec
  6. wherea.id=b.userid
  7. andb.moduleid=c.id

这个视图是从两个表中分别取出id。
建立hbm.xml :

代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD2.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  3. <hibernate-mapping>
  4. <classname="com.fulong.journal.cad.po.perm.VUserPerm"table="V_USER_PERM"schema="JCAD">
  5. < id name = "id" column = "ID" type = "long" > <column name="JHDM" length="14" />
    <generator class="assigned" />
  6. </ id >
  7. 随便挑以下一个属性作主键即可
  8. <idname="userid"column="USERID"type="string"length="32"not-null="true">
  9. <generator class="assigned" />
  10. </id>
  11. <propertyname="moduleid"column="MODULEID"type="string"length="32"not-null="true"/>
  12. </class>
  13. </hibernate-mapping>
<script type="text/javascript">render_code();</script>
注意:
view一般用在小涉及到多个表的组合查询时用到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值