关于Hibernate 中formula简介

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

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

以前的解决方案如下:

解决方案一:在对应的entry上面做一个一对多关联,然后再创建一个临时字段

@Transient

private String shiFouYZJD

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

性能很受影响。

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

今天用了formula感觉不错,简单介绍下用法,很简单但是以前真没注意到这个

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

private String shiFouYZJD;

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


你可能感兴趣的:(Hibernate,Formula)