原本我想可以更深的挖掘一下这个问题,但是越查感觉东西越多,我的脑子就越混乱,于是我果断的停止了,我还需要一个清晰的头脑以便于接下来的工作,最后还是记录下当前碰到并解决的问题,其它的再慢慢消化吧。
碰到的问题:
在hibernate反向生成oracle视图的过程中,发现hibernate将所有的字段变成一个联合主键,在创建了一个model对象的同时,还建了一个modelID的类,另外因为在当前框架中对数据库表的DAO层查询都是封装起来的,需要model和相应的id来做参数,于是我就纠结了,我发现,我需要给视图建立一个主键...
解决办法:
先不说其他的各种说法,用查到的以下方法,确实暂时解决了当前问题,例:
表stu:字段stuID,stuName,markId;
表mark:字段markID,markNum;
正常创建一个视图的写法:
select or replace view view_stuDetail as select s.stuName stuName,m.markNum stuMark from stu s,mark m where s.markId=m.markID
而如果我们要给它加主键的话,改动也是非常小的:
select or replace view view_stuDetail(stuName,stuMark,CONSTRAINT id_pk PRIMARY KEY (stuName) RELY DISABLE NOVALIDATE) as select s.stuName stuName,m.markNum stuMark from stu s,mark m where s.markId=m.markID这样可以看出来了,只是加了一句话的事情,当然,这里只是随便写了两个数据库。
疑惑:
在查看的过程中发现了一下几个观点,也认为挺有道理的:
1、视图没有主键,只是用来查询的,并不用来储存,它的数据都是基表中带过来的;
2、视图没有主键,但是可以加上唯一索引;
那现在加的主键又是什么意思呢,它确实解决了我当前的问题啊
毕竟功力太浅,这方面好多东西欠推敲啊,不过这个当前确实也解决了问题,自然应该有它的道理,暂且记录下吧
原文地址:http://blog.csdn.net/marsmile_tbo/article/details/38150723