当前位置: 首页 > 面试题库 >

在Hibernate中使用查询来映射实体

程冥夜
2023-03-14
问题内容

考虑表

sales (id, seller_id, amount, date)

这是sales使用查询生成的视图SELECT seller_id, SUM(amount) FROM sales GROUP BY seller_id

total_sales (seller_id, amount)

我想为总销售额创建一个实体,但没有sql端的视图。

该实体将通过查询构造。我发现的最接近的东西是
this ,但是我无法使其工作。

即使我定义了加载器,hibernate也会查找实体表并在找不到时给出错误。如果我创建表,它不会从我定义的命名查询中加载实体,Hibernate会生成查询本身。

有没有一种方法可以使@Loader工作,或者有另一种我可以将查询映射到实体的方法?


问题答案:

您为什么不只new在查询中使用?

select new TotalSales(seller_id, count(seller_id))
from sales
group by seller_id

您只需编写一个带有构造函数的TotalSales类即可,该构造函数采用Seller_id和一个整数。

编辑
:使用标准API时,您可以使用AliasToBeanResultTransformer(请参阅API文档)。它将每个别名复制到相同名称的属性。

 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需要一个SellerIdCount属性。



 类似资料:
  • 我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。

  • 我有EntityA和EntityB,它们具有一个从EntityA->EntityB的OneToMany关系。我想将EntityB作为属性包含到EntityA中。 另一种解决方法是在方法中获取并设置该属性,但我的目标是在entity类中找到一个解决方案。有人有主意吗?谢谢

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。

  • 我们必须在可选元素“mappedby”中指定什么。是特定模型的table_name还是classname? 哪个是正确的? 这个

  • 我一直在使用多对多映射,这里是我的POJO类。 Menu.java: 使用者爪哇: 我有用户,菜单和第三个映射表这是自动创建的,我成功地得到结果时,在mysql中执行以下查询 我想在Hibernate中写这个查询如何处理这个东西???