关于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”


转载于:https://my.oschina.net/lvzjane/blog/136131

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值