我在Spring mvc中使用了一个过程。我想为过程将返回的结果做一个 sqlresultsetmap。该过程不会返回任何与实体相关的结果。我怎样才能为该过程执行 sqlresultset映射。
用声明的类 emp 编写的 SQL 映射:
@SqlResultSetMapping(name = "sampleemp", classes = {
@ConstructorResult(targetClass = emp.class,
columns = { @ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "department"),
})
})
在同一类 emp 中编写的 NamedStoredProcedureQuery:
@NamedStoredProcedureQuery(name = "employee", procedureName = "sample", parameters =
{ @StoredProcedureParameter(mode = ParameterMode.IN, name = "id", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "name", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name= "department", type = String.class)
},
resultSetMappings = { "sampleemp" })
如何使用以下代码调用存储过程时从 DAO 层映射这些内容:
StoredProcedureQuery spQuery = (StoredProcedureQuery) entityManager.createStoredProcedureQuery("sample")
.registerStoredProcedureParameter("id", Integer.class, ParameterMode.IN)
.registerStoredProcedureParameter("name", String.class, ParameterMode.IN)
.registerStoredProcedureParameter("department", String.class, ParameterMode.IN)
.setParameter("id", id)
.setParameter("name", name)
.setParameter("department", dept);
spQuery.execute();
1(ConstructorResult 意味着您具有具有相同字段的构造函数(顺序问题(
我更喜欢@EntityResult。这也需要一个构造函数,但没有参数。
2(我无法让它与createStorageProcedureQuery一起工作,所以我打电话
final Query query1 = entityManager.createNativeQuery("call yourProcName(PARAMS)", "NAME_OF_SqlResultSetMapping");
List<Object[]> results = query.getResultList();
https://www.baeldung.com/jpa-sql-resultset-mapping