更改分组时Hibernate中查询的不同返回类型
Posted
技术标签:
【中文标题】更改分组时Hibernate中查询的不同返回类型【英文标题】:Different return type for query in Hibernate when changing group by 【发布时间】:2021-11-04 01:27:13 【问题描述】:我有一个在 Hibernate 中运行带有 resultSetMapping 的 NativeQuery 的方法。它选择一些列(总是相同的列),进行一些过滤和分组,并使用 Query.getResultList() 返回结果。
这是 ResultSetMapping
@SqlResultSetMapping(name = "MonthlySaleMapping", classes = @ConstructorResult(targetClass = MonthlySalesProjection.class, columns =
@ColumnResult(name = "segment"),
@ColumnResult(name = "businessArea"),
@ColumnResult(name = "customerId"),
@ColumnResult(name = "customerGroupId"),
@ColumnResult(name = "category"),
@ColumnResult(name = "manufacturer"),
@ColumnResult(name = "organizationNumber"),
@ColumnResult(name = "year"),
@ColumnResult(name = "monthOfYear"),
@ColumnResult(name = "totalSales"),
@ColumnResult(name = "totalVAT"),
@ColumnResult(name = "tb"),
@ColumnResult(name = "quantity")
))
这是构造函数
public MonthlySalesProjection(String segment, String businessArea, int customerId, int customerGroupId, String category, String manufacturer, String organizationNumber, int year, int monthOfYear, BigDecimal totalSales, BigDecimal totalVAT, BigDecimal tb, BigDecimal quantity)
用户可以设置组,问题就在这里。对于 group by 的所有变体,用户可以使用 IntegerType 返回 year 和 monthOfYear(在整个代码中都是 int)的结果,但仅在 customerId 和 customerId 上分组时除外。然后将这两列的类型作为 BigIntegerType 返回。我尝试在我的 ColumnResult 上设置 type=int.class,但没有帮助。
数据库:mysql 8.0.26 连接器:mysql-connector-java:8.0.26 休眠:hibernate-core:5.4.31.Final Java:OpenJDK 11.0.12有谁知道为什么我的 SQLResultSetMapping 会根据 group by 得到不同的类型?
【问题讨论】:
我现在已经将 year 和 monthOfYear 的构造函数参数更改为 Number 并且这似乎有效,但我仍然不知道为什么它会根据我的组返回不同的类型 by 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:我猜 Oracle 或 JDBC 驱动程序只是根据一些查询计划程序相关的差异来报告不同的列类型。最好明确设置类型,以避免此类问题。
【讨论】:
看起来很合理。但是你如何设置类型?如前所述,我在@ColumnResult 中尝试过 type=int.class,但没有任何区别 您使用Number
的方法对我来说听起来不错。以上是关于更改分组时Hibernate中查询的不同返回类型的主要内容,如果未能解决你的问题,请参考以下文章
当Hibernate查询中有多个bean别名时,列表的返回类型是什么?