使用@NamedStoredProcedureQuery批注从hibernate调用存储过程。我的存储过程返回2个表中的字段,我可以从postgresql中调用它,如下所示:
select * from sp_select_employees t (id int, emp_name text, emp_department text)
我想从hibernate调用该存储过程,但我得到"需要列定义列表"。我知道它因为hibernate不包括
t (id int, emp_name text, emp_department text)
一部分。我如何在休眠中执行此操作?以下是我的JPA课程
@NamedStoredProcedureQuery(
name = "SelectEmployees",
resultClasses = EmployeeDetails.class,
procedureName = "sp_select_employees"
)
public class Employees implements java.io.Serializable {
....
}
我调用hibernate的代码
public List<EmployeeDetailsDTO> getEmployeeDetails()
{
StoredProcedureQuery query = em.createNamedStoredProcedureQuery("SelectEmployees");
final List<EmployeeDetails> searchResults = query.getResultList();
final List<EmployeeDetailsDTO> results = new ArrayList<EmployeeDetailsDTO>();
for (Campaigns searchResult : searchResults)
{
EmployeeDetailsDTO dto = new EmployeeDetailsDTO(searchResult);
results.add(dto);
}
return results;
}
答案 0 :(得分:2)
更改您的程序以使其RETURNS TABLE
或添加OUT
参数,这样您就不必依赖于发送列定义列表。或者在Hibernate中使用本机查询。
列定义列表和返回record
的查询是Hibernate不直接支持的PostgreSQL扩展。