Привязка нескольких наборов результатов к нескольким классам из хранимой процедуры с использованием Hibernate - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу создать и выполнить StoredProcedureQuery, который отображает результаты двух операторов SELECT на два соответствующих bean-компонента.

Неужели я неправильно понимаю цель createStoredProcedureQuery?

Из того, что я могу сказать из обширной отладки, Hibernate Loader считает, что второй SELECT имеетте же столбцы, что и первый, а затем ошибки при попытке сопоставления id2 из Bean2 с id1 первого SELECT.

При выполнении этой процедуры без предоставления каких-либо классов результатов для createStoredProcedureQueryЯ получаю два списка, оба с Bean1 объектами.


Сохраненное положение:

CREATE OR ALTER PROC temp.testMultipleResultSets
AS
BEGIN

    ---------------- DDL
    CREATE TABLE #Table1 (id1 INT, value1 INT);

    CREATE TABLE #Table2 (id2 INT, value2 VARCHAR(20));


    ---------------- DML
    INSERT #Table1 (id1, value1)
    VALUES
    (1, 1111);

    INSERT #Table2 (id2, value2)
    VALUES
    (2, '2222');


    ---------------- DQL
    SELECT
        id1
      , value1
    FROM
        #Table1;

    SELECT
        id2
      , value2
    FROM
        #Table2;

END;


Создание и выполнение:

@Repository
public class MultipleResultSetsTest extends AbstractDAO {

    public Map<String, Object> getMultiple() {
        try {
            StoredProcedureQuery q = this.getEntityManager().createStoredProcedureQuery(
                "temp.testMultipleResultSets",
                Bean1.class,
                Bean2.class
            );

            q.execute(); // An exception is thrown here during the binding of the second SELECT
            List<Bean1> b1List = q.getResultList();
            List<Bean2> b2List = q.getResultList();

            Map<String, Object> map = new HashMap<>();
            map.put("b1List", b1List);
            map.put("b2List", b2List);

            return map;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}


Бобы:

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Bean1 {

    @Id
    @Column(name = "id1")
    private int id1;

    @Column(name = "value1")
    private int value1;
}
@Entity
@Getter
@Setter
@NoArgsConstructor
public class Bean2 {

    @Id
    @Column(name = "id2")
    private int id2;

    @Column(name = "value2")
    private String value2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...