考虑表
sales (id, seller_id, amount, date)
这是sales使用查询生成的视图SELECT seller_id, SUM(amount) FROM sales GROUP BY seller_id
sales
SELECT seller_id, SUM(amount) FROM sales GROUP BY seller_id
total_sales (seller_id, amount)
我想为总销售额创建一个实体,但没有sql端的视图。
该实体将通过查询构造。我发现的最接近的东西是 this ,但是我无法使其工作。
即使我定义了加载器,hibernate也会查找实体表并在找不到时给出错误。如果我创建表,它不会从我定义的命名查询中加载实体,Hibernate会生成查询本身。
有没有一种方法可以使@Loader工作,或者有另一种我可以将查询映射到实体的方法?
您为什么不只new在查询中使用?
new
select new TotalSales(seller_id, count(seller_id)) from sales group by seller_id
您只需编写一个带有构造函数的TotalSales类即可,该构造函数采用Seller_id和一个整数。
编辑 :使用标准API时,您可以使用AliasToBeanResultTransformer(请参阅API文档)。它将每个别名复制到相同名称的属性。
AliasToBeanResultTransformer
List list = s.createCriteria(Sales.class) .setProjection(Projections.projectionList() .add( Projections.property("id"), "SellerId" ) .add( Projections.rowCount("id"), "Count" ) ) .setResultTransformer( new AliasToBeanResultTransformer(TotalSales.class) ) .list();
然后,您TotalSales需要一个SellerId和Count属性。
TotalSales
SellerId
Count