关于Hibernate 中formula简介

今天作项目第一次用到Hibernate的formula,解决了困扰了很长时间的一个问题 sql

之前作各类层级树的时候,查询结点是否是叶子结点,若是是叶子节点就直接展开图标,当时想到了几种解决方案可是总感受别扭,今天看hibernate书籍的时候看到了formula能够解决关于派生属性的映射,把项目中的代码重构了一下,顿时感受很不错。 性能

之前的解决方案以下: spa

解决方案一:在对应的entry上面作一个一对多关联,而后再建立一个临时字段 .net

@Transient hibernate

private String shiFouYZJD orm

在getShiFouYZJD()中判断关联查询的set集合是否是empty,而后给shiFouYZJD附上对应的标识位,这种作法理解是好理解,可是当个人树层级超过三级树上节点数目超过一万就挂了,举个例子假如第二层节点有一百个,每一个节点下再挂100个子节点。。。那么关联查询内存中存放的对象你懂得100*100.。。。 对象

性能很受影响。 内存

解决方案二:写sql,用createSQLQuery而后获得一个List<Object[]> 类型的集合。。。紧接着作遍历new个实体而后使劲的set值。。若是一个表中有30个字段。。。你会瞬间崩溃的各类if(value!=null),最后功能实现了,可是代码你本身看的都蛋疼。。你本身都会想到确定会有比这好的方法 get

今天用了formula感受不错,简单介绍下用法,很简单可是之前真没注意到这个 form

@formula(select nvl(count(1),0) from danweixx d where d.shangji=danweidm)

private String shiFouYZJD;

而后对应的查询hql就直接hql = “from **Entry”

相关文章
相关标签/搜索