Я хочу создать и выполнить 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;
}