需求很简单,就是关联两个实体,多查询一个name出来。这样就费事了,用resultTransformer来做。就需要这么写
String hql = "select a.id as id, "
+ "a.assetsNo as assetsNo,"
+ "a.assetsSpecification as assetsSpecification,"
+ "a.bxBeginTime as bxBeginTime,"
+ "a.bxEndTime as bxEndTime,"
+ "a.contractId as contractId,"
+ "a.clientId as clientId,"
+ "a.assetsType as assetsType,"
+ "a.manufacturerCode as manufacturerCode,"
+ "a.supplierCode as supplierCode,"
+ "a.count as count,"
+ "a.installationLocation as installationLocation, "
+ "at.name as assetsTypeName from Assets a, AssetsType at where a.assetsType=at.id and a.clientId=:clientId and a.contractId=:contractId";
return findPageByHql(page, hql, params, Assets.class);
注意:as必须加上,否则会报错 Could not find setter for 0 on class com.kingen.bean.Assets
就他娘的为了关联一个name,我就需要多写这么多行,还傻叉的把这个类的所有字段列出来并且加上as。
hibernate这么玩效率也太低了吧!难怪现在都转Mybatis了。
本来想不用hql,用sql的addEntity,这样只需要select a.*,name就行了,但是name是transient的,是无法set值的(addEntity只对hibernate实体起作用)
private String assetsTypeName;
// Constructors
@Transient
public String getAssetsTypeName() {
return assetsTypeName;
}
真的是无语了,大家在查hibernate VO的时候是怎么做的呢??