我之前用Hibernate时都是直接from 实体类,这样就把所有字段都查出来了,但对于缓存的使用也不熟悉,所以感觉每次查询都是直接去数据库查。现在有一个疑问,比如说:数据库有一张用户表,一条记录保存了用户的基本信息、简历及薪资等等。现在要查询用户信息了,要求不同人有不同权限,而不同权限导致页面看到的资料列的多少及具体信息会不同,那我想问用HQL时是查出记录的所有字段(直接from 实体类),在界面上根据权限显示不同的tr  td呢,还是根据不同权限在HQL语句那边select A,B,C…… from 实体类?一条记录还好,占不了多少内存,那如果要查出不同部门甚至所有用户的信息时,如果按我那种查出所有字段的方式不就会很占内存吗,如果根据权限来筛选字段,那不是要写很多筛选的语句?

解决方案 »

  1.   

    分页是有,但那一页下来也会很多,一条记录有100多个字段。另外补充:如果elect A,B,C…… from 实体类,查出来的是多个的话就是List<Object[]> 了,那我不是要定义很多中VO(根据权限不同显示不同列),才能在界面上显示出来。
      

  2.   

    会闭包算法吧?你把{A1..An}的{A1..An}+求出来。然后建立一个这样的列表就几个字段 A,ROLE,LEVEL 怎么用,是增量模型还是配置模型自己考虑。然后根据权限实现。属性列表。这样select {属性列表序列} from 实体。实现投影就可以了。也有更好的方式,多半我也不用HQL了。
      

  3.   

    那就不好整了。给你个直接的办法。那你就用权限能够看的最大集合。在最大集合内投影。查询结果使用HashMap<列字段名称(属性表字段值),O(实际表字段值)>页面调用HashMap对象例如属性表查出这个角色有 公文标题,公文附件,部门HashMap对象集合
    <公文标题,xxx><公文附件,xxx><部门,xxx>
    页面使用${HashMap对象[公文标题]}