如何在Hibernate 5.2之后使用`setResultTransformer`?

时间:2016-07-07 07:41:50

标签: java hibernate

我想用<receiver android:name=".AlarmReciever" android:enabled="false"> </receiver> 来获得query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)。但我有一个例外:

List<Map>

我无法找到已实施的java.lang.NoSuchMethodError: org.hibernate.query.Query.setResultTransformer(Lorg/hibernate/transform/ResultTransformer;)Lorg/hibernate/Query; 类。 方法org.hibernate.query.Query位于setResultTransformer

为什么不推荐使用org.hibernate.Query?

4 个答案:

答案 0 :(得分:5)

  

ResultTransformer附带一个未遵循功能接口语法的旧定义。因此,在这个例子中我们不能使用lambda。 Hibernate 6.0旨在克服这个问题,因此不推荐使用Hibernate ORM 5.2 ResultTransformer。然而,将提供一种替代方案,因此我们在本文中讨论的概念即使在Hibernate 6中也会停滞不前。

https://vladmihalcea.com/why-you-should-use-the-hibernate-resulttransformer-to-customize-result-set-mappings/

答案 1 :(得分:0)

Hibernate 6 尚未发布。但是,基于此 issue ResultTransformer 接口被拆分为 2 个功能接口:TupleTransformer 和 ResultListTransformer。

答案 2 :(得分:-1)

如果您在查询中选择多个项目,请不要使用session.createQuery(hql,transformerClass);,而是使用旧的弃用方法。

答案 3 :(得分:-1)

由于Hibernate 5.2使用Java 8,因此您可以使用流api

List<EmployeeDto> resultList = session
            .createQuery(" from Employee", Employee.class)
            .stream()
            .map((employee) -> {
                return new EmployeeDto(employee);
            })
            .collect(Collectors.toList());

此代码还将改善性能。