论坛首页 Java企业应用论坛

关于Hibernate Mapping XML文件中Class Element的"where=&q

浏览 6963 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-03-29  
大家写三层应用的时候,应该都碰到过"View"的问题,也就是说:数据库有1000条记录,但是某个用户只能看100条,那么其他的900条记录对该用户是不可见的,该用户要查看系统中的记录条数,返回的应该是100而不是1000.

上面的实现可以有2中办法,一种是把“权限”信息直接传递到sql,也就是让持续化层知道这些“权限”信息。第二种是持续化层只负责数据load/save/count,而让中间层来“过滤”某些信息,提供视图服务。

大家肯定都知道是第一种方法好,可是实现当中要求把权限信息转换成SQL,最终体现到哪个SELECT语句中。从而导致持续化层和权限层互相关联,很难解偶。那么,所谓的AOP/关注分离等等设计原则,都成了狗P.

OK,扯远了。

今天仔细研读hibernate manual,发现了这个<Class where="xxx"/>这个属性。
我想,这是不是Gavin在Hibernate中留下的一个入口,让我们处理类似“View”这样的功能的呢?可惜Hibernate manual语焉不详,偶又对Hibernate src不熟悉

请问?
有谁用过这个Where ? 后面跟的是怎样的SQL ?
Hibernate src中那个类来处理这个Where ?或者 Hibernate src中怎么处理这个Where属性的?

请大虾不吝指教!!
   发表时间:2004-04-16  
"大家肯定都知道是第一种方法好"  这我就不同意
你这么认为好 怎么立马用了个“可是”把自己反驳了一下?
“一种是把“权限”信息直接传递到sql”我对你怎么传递权限到sql还真搞不懂
认为第二种方法才好,
持久层就是持久层,老老实实的做好‘load/save/count’
不要来干涉‘权限’这些业务逻辑
‘从而导致持续化层和权限层互相关联,很难解偶’知道这些道理还说第一种方法好 真是该打

“那么,所谓的AOP/关注分离等等设计原则,” 我又迷惑了 AOP怎么你了 让你骂人家‘狗P’和你说的这些问题有啥干系 真为AOP叫屈

<Class where="xxx"/>这个属性
可以用来做 但我枉自揣度其本意决不是来处理“View”这样的功能而来的
它可以怎么用呢 我可以说点
比如在一个系统 有狗的类型 和猫的类型 而这些信息想放在一表中
class Dog{
    private Type type;
}
class Cat{
    private Type type;
}
class Type{
    private int type_id;
    private String desc;
}
table Type:
    TYPE_ID NUMBER
    desc   varchar2
    1,大狗
   2,小狗
   3,白猫
   4,黑猫
狗的类型只用1和2,猫的类型是3以后的
在狗和猫的hibernate mapping里 可以这样些
<class name="Dog" table="Type" where="type_id<3"/>
<class name="Cat" table="Type" where="type_id>=3"/>
纯粹数据库的玩意 没啥意思
0 请登录后投票
   发表时间:2004-04-20  
楼上的说对了.
0 请登录后投票
   发表时间:2004-04-25  
感谢楼上的回复。
我自己碰到的问题其实是View究竟让谁去实现的问题,这也是一个设计上的问题,和Hibernate无关。
Hibernate Mapping 文件中Class元素的Where属性则是在我尝试解决上面的问题过程中,想到的一种解决办法:
让持续化层和业务层用一种体面的方法来交流view 的范围的信息,而不是把View范围在HQL中体现。

我想知道Hibernate是否已经有这种功能,前些日子看到了Hibernate3的scope


"Virtualization"

A number of important and interesting problems may be solved by presenting the user with a certain, filtered, subset of the data. For example, a user might want to see data valid at a particular point in time, or may have permissions to view data only in a particular region. Rather than forcing application code to specify this filter criteria in tedious query conditions, Hibernate 3 will allow the (parametrized) filters to be applied at the session level.


这就是我想要的。

呵呵。在Hibernate没出来之前,我得自己写这样的一个ViewInterceptor,然后根据调用者的权限信息,截获并且动态的修改HQL语句,从而达到所谓实现"View"的目的。

我无意贬低AOP和IOC这些思想技术,相反,我竭力推崇这些东西。我现在的框架就是用AOP来做Persistence和Security管理。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics