簡體   English   中英

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

[英]How to use `setResultTransformer` after Hibernate 5.2?

我想使用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的實現類。 方法setResultTransformerorg.hibernate.Query

為什么不推薦使用 org.hibernate.Query?

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/

Hibernate 6 尚未發布。 然而,基於這個問題, ResultTransformer 接口被拆分為 2 個功能接口:TupleTransformer 和 ResultListTransformer。

不要使用session.createQuery(hql,transformerClass); 如果您在查詢中選擇多個項目,請改用舊的已棄用方法。

https://thorben-janssen.com/hibernate-resulttransformer/參考這個 query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

由於 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());

此代碼還將提供一些性能改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM