Пружинный загрузочный набор ResultTransformer и addScalar - PullRequest
0 голосов
/ 06 января 2019

У меня проблема с возвратом набора результатов запроса с использованием объекта entityManager. Я хочу вернуть свой запрос на соединение, который должен быть преобразован в объект pojo.

поэтому после многих попыток я нашел приведенный ниже рабочий код

public List<Test> getData() {

    Query a = entityManager.createNativeQuery("select t1.data1,t2.data2 from test1 t1 join test2 t2 on t1.id = t2.id");          
    a.unwrap(SQLQuery.class)      
    .addScalar("data1", LongType.INSTANCE)      
    .addScalar("data2", DoubleType.INSTANCE)      
    .setResultTransformer(Transformers.aliasToBean(Test.class));     

    return a.getResultList();    
}

Но у меня были предупреждения, что методы setResultTransformer() и addScalar() устарели.
Может ли кто-нибудь указать альтернативный код или предоставить решение.
Благодаря.

1 Ответ

0 голосов
/ 06 января 2019

1) Первое, что устарело, это SQLQuery:

(начиная с 5.2) вместо этого используйте NativeQuery.

2) Но это не решит вашу проблему, потому что SQLQuery.addScalar() org.hibernate.query.Query.setResultTransformer() также устарели, как вы заметили.
Из руководства по миграции в Hibernate 5.3 :

С помощью ResultTransformer можно определить, как результаты запрос должен быть обработан, т.е. он может быть использован для изменения «формы» результаты запроса.

В Hibernate 6.0 ResultTransformer будет заменен @FunctionalInterface и по этой причине setResultTransformer () метод в org.hibernate.query.Query устарел.

В Hibernate 5.3 нет замены ResultTransformer, поэтому, как рекомендуется здесь, на данный момент его можно использовать как есть.

Таким образом, вы можете оставить его, например, и подавить предупреждение, добавив также комментарий TODO.

@SuppressWarnings("deprecation")
public List<Test> getData() {

    Query a = entityManager.createNativeQuery(
            "select t1.data1,t2.data2 >from test1 t1 join test2 t2 on t1.id = t2.id");
    a.unwrap(NativeQuery.class)
      // TODO warning to remove with Hibernate 6 for addScalar()
     .addScalar("data1", LongType.INSTANCE)
     .addScalar("data2", DoubleType.INSTANCE)
      // TODO warning to remove with Hibernate 6 for setResultTransformer()
     .setResultTransformer(Transformers.aliasToBean(Test.class));

    return a.getResultList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...