1

我正在使用 @NamedStoredProcedureQuery 注释从休眠中调用存储过程。我的存储过程从 2 个表返回字段,我可以从 postgresql 调用它,如下所示:

select * from sp_select_employees t (id int, emp_name text, emp_department text)

我想从休眠中调用该存储过程,但我得到“需要列定义列表”。我知道它是因为休眠不包括

 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 {
....
}

我称之为休眠的代码

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;     

}  
4

1 回答 1

2

更改您的过程RETURNS TABLE或添加OUT参数,因此您不依赖于发送列定义列表。或者在 Hibernate 中使用本机查询。

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

于 2014-03-03T08:15:17.520 回答