我需要转换使用 Hibernate:Mutiny 运行 [Select] 查询后得到的结果,但我不知道如何为结果指定类型。当我收到列表时,我得到一个列表,当尝试映射这些结果时,我无法访问特定属性,因为它们只是 java.lang.Object 的实例。
因为这只是组织数据的一种方式,所以我需要我的“视图”不是是一个实体(这么说,因为我看到了一个解决方案强制你只能在实体类上使用它) .
sessionFactory.withSession(
session -> session.createNativeQuery(myQuery)
.getResultList().map(MyListView::ProcessData);
我在哪里收到此列表:
public class MyListView{
private List<MyIndividualView> items;
public static MyListView processResults(List<Object> results){
// Transform data.
}
}
List 似乎包含 Object 实例,尝试转换为此类功能通常返回的类(如 JsonObject、Map 或 Row)会抛出 ClassCastException。
我发现了另一个类似的 StackOverflow 条目(将添加下面的链接),但他们通过“展开”查询然后使用“转换器”来映射它来解决它:
query.unwrap(SQLQuery.class)
.addScalar("total", LongType.INSTANCE)
.addScalar("amountOfSales", LongType.INSTANCE)
.addScalar("amountOfProducts", LongType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(SaleStatsInfo.class));
我无权访问该 unwrap 方法。也许这是一个不同的依赖项或其他东西,我真的不知道,这不是我现在正在使用的选项。 知道如何解决这个问题吗? 感谢您的阅读。
解决方案:看来我得到的实际上是一个数组列表(Object[]),您可以通过知道顺序来访问所有属性并将它们转换为正确的类型。 这不是处理此类事情的最奇特的方法,但是,由于缺乏任何其他解决方案,必须这样做。