日期:2014-05-17  浏览次数:20682 次

HIBERNATE视图映射
我想用注解方式做一个HIBERNATE虚拟视图映射,也就是说,数据库里面是没有这个视图的,在HIBERNATE虚拟一个,然后映射,XML方式知道怎么写,但注解找不到实现方法,希望大家帮帮忙。
XML方式如下:
XML code

   <class name="Customer" table="customer">        
        <id name="id" unsaved-value="0" column="id">
            <generator class="hilo"/>
        </id>        
        <property name="name"  not-null="true"/>        
    </class>
    
    <class name="Supplier" table="supplier">        
        <id name="id" unsaved-value="0" column="id">
            <generator class="hilo"/>
        </id>
        <property name="name" not-null="true"/>            
    </class>
    
    <class name="All" mutable="false">    
        <subselect>
            select id, name from customer
            union 
            select id, name from supplier
        </subselect>
        
        <synchronize table="customer"/>
        <synchronize table="supplier"/>
        
        <id name="id" unsaved-value="0" column="id">
            <generator class="hilo"/>
        </id>        
        <property name="name"/>        
    </class>



------解决方案--------------------
我们先考虑2个问题
1 新建了新的实体化视图
这个东西可不是随便可以建的,应该是一个团队研究的结果,有需要的时候才建立
一般情况下,数据仓库和挖掘才有这个问题,数据从多个远程数据库读取数据,然后放到本地的数据库并定时更新

2 数据的更新问题
我不赞成数据打包发送,应该是远程的机器主动获取,方式可以是
1) 直接的数据库连接,这个在数据仓库最常见了
2) 其他的封装,比如ws等


我的意见:
你应该在你的目标机器部署一个应用,让其远程连接你的原始数据库(至于怎么连接,你自己考虑,直连或者通过服务都可以)进行数据的更新。如果需要新的视图,也应该是目标机器自己做,至于原始数据库怎么配合,倒无所谓了,可以提供一个本地视图来供目标数据库使用,也可以根本不管,让目标数据库自己进行组合查询就行了。

总之,谁要数据,谁自己干活。 你可以看看数据仓库的概念。 当然更新的速度不可能是实时的。

有些数据库提供远程视图,比如Oracle 的 dblink 等,可以参考。这些都是方便数据获取的。