在hibernate中使用@NamedStoredProcedureQuery时,列定义列表是必需的消息

时间:2014-03-01 09:46:06

标签: hibernate postgresql wildfly

使用@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;     

}  

1 个答案:

答案 0 :(得分:2)

更改您的程序以使其RETURNS TABLE或添加OUT参数,这样您就不必依赖于发送列定义列表。或者在Hibernate中使用本机查询。

列定义列表和返回record的查询是Hibernate不直接支持的PostgreSQL扩展。