在entity中有些属性不用保存到数据库,比如我遇到的统计次数就没存数据库,而是使用的hibernate的注解@Formula进行查询。
@Formula多数情况下用于做统计用途,但是在使用的时候遇到一个问题,始终无法查询出条数。
代码:
// @Transient
@Formula(value="(select count(*) from FoodPoiVarietyRecommentLog f where f.poiId=poiId and f.varietyFood_id=varietyFood_id )")
public Integer getRecommentNum() {
return recommentNum;
}
public void setRecommentNum(Integer recommentNum) {
this.recommentNum = recommentNum;
}
// @Transient
@Formula(value="(SELECT avg(f.price) from FoodPoiVarietyRecommentLog f where f.poiId=poiId and f.varietyFood_id=varietyFood_id )")
public Double getAvgPrice() {
return avgPrice;
}
最终发现是@Transient不能和@Formula一起使用,这样@Formula会失效。但其他有些一起使用却是可以的,可能是版本有差异。
我用的是5.2.4的,我看其他有些版本是可以的。
@Formula后面是sql,并不是hql。即原生sql写法
@Formula使用的时候,本entity的注解要么全在方法上,要么全在变量上
注意的一点是部分版本不能和@Transient一起使用,如果确认sql等没有写错,一直为null,注释@Transient看看是不是版本问题引起的。
我把@Transient注释了以后一切OK