我的购物车(0)

Hibernate加载树形结构的数据怎么用上二级缓存?

作者:altera ,2014/2/15 22:37:36 发布     举报
    (745) (0) (0) (0)
  • 经常有树形结构的数据保存在一张二维表中,例如组织架构,多级菜单等。一般是在一张表中使用ID,PID作关联。我项目中的是这样一个树形菜单:

    01 @Entity
    02 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region ="Menu")
    03 @Table(name ="DDT_MENU", schema ="CBA", uniqueConstraints =@UniqueConstraint(columnNames ="ENNAME"))
    04 publicclassMenuimplementsjava.io.Serializable {
    05      
    06     privatestaticfinallongserialVersionUID = 1L;
    07     privateLong id;
    08     privateEMenu enname;
    09     privateString zhname;
    10     privateLong pid;
    11     privateString grade;
    12      
    13     privateMenu parent;
    14     privateSet<Menu> children=newTreeSet<Menu>();
    15      
    16     publicMenu() {
    17     }

     下面是关联配置:

    01 @ManyToOne(fetch = FetchType.LAZY)
    02 @JoinColumn(name ="PID", nullable =true)
    03 publicMenu getParent() {
    04     returnparent;
    05 }
    06  
    07 @OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, mappedBy ="pid")
    08 publicSet<Menu> getChildren() {
    09     returnchildren;
    10 }

    这些数据由于很修改少,访问频繁,因此很适合放在缓存中。

    下面是EhCache配置:

    01   <cachename="Menu"   
    02        maxElementsInMemory="100"
    03        eternal="false"
    04        timeToIdleSeconds="120"
    05        timeToLiveSeconds="120"
    06        overflowToDisk="false"
    07        diskPersistent="false"
    08        diskExpiryThreadIntervalSeconds="120"
    09        memoryStoreEvictionPolicy="LRU"  
    10 />
    我在程序中用递归方式获得整个树形结构的数据,观察后台Hibernate输出的语句,一直都没使用上缓存。根据Hibernate使用缓存的机制: 
    1) Hibernate首先根据这些查询信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。   2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中。   3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。 
    来看,也确实使用不上,因为每次递归getChildren()的查询条件不同。现在不知道咋搞,请各位大侠不吝赐教
标签:

css

共有0条网友评论
文明上网,理性发言
专题关键词
专题版主
申请成为版主
  • Royston

    高级工程师 安富利中国有限公司 FAE熟练应用,ISE14.1 工具

  • Royston

    高级工程师 安富利中国有限公司 FAE熟练应用,ISE14.1 工具

  • Royston

    高级工程师 安富利中国有限公司 FAE熟练应用,ISE14.1 工具

  • Royston

    高级工程师 安富利中国有限公司 FAE熟练应用,ISE14.1 工具

  • Royston

    高级工程师 安富利中国有限公司 FAE熟练应用,ISE14.1 工具

类似问题
最新分享上传与展示原则:
1、首先展示的产品必须是电子业内的作品;
2、对业内人士有学习的意义;
3、作品可以以广告的形式出现,若广告目的太
强烈,不予展示;
4、带病毒性的文件,不予展示,若严重,还会
屏蔽会员IP;
5、任何的分享都会通过系统管理员的审核,审
核时间,通常不超过24小时;