代码之家  ›  专栏  ›  技术社区  ›  Gero Mendy

如何为一个类分配兵变的结果。查询

  •  0
  • Gero Mendy  · 技术社区  · 1 年前

    在使用Hibernate:Mutiny运行[Select]查询后,我需要转换得到的结果,但我不知道如何给结果一个类型。当我收到列表时,我会得到一个list,当试图映射这些结果时,我无法访问特定的属性,因为它们只是java.lang.Object的无形内容。

    因为这只是组织我的数据的一种方式,我需要我的“视图” 作为一个实体(这么说,正如我所看到的解决方案 强迫 您只能在Entity类上使用它)。

    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));
    

    我无法访问 打开…的包装 方法也许这是一种不同的依赖性或其他什么,我真的不知道,这不是一个选项,因为我现在正在使用它。 知道怎么解决这个问题吗? 感谢您的阅读。

    我所指的链接: createNativeQuery mapping to POJO (non-entity)

    1 回复  |  直到 1 年前
        1
  •  1
  •   Gero Mendy    1 年前

    解决方案:实际上,我得到的似乎是一个数组列表(Object[]),您可以通过知道顺序来访问所有属性,并将它们强制转换为正确的类型。 这不是处理这样的事情的最理想的方法,但由于缺乏任何其他解决方案,这将不得不做。