使用@NamedStoredProcedureQuery注释从hibernate调用存储过程。我的存储过程返回两个表中的字段,我可以从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;

}

最佳答案

更改过程,使其RETURNS TABLE或添加OUT参数,这样就不必依赖于发送列定义列表。或者在Hibernate中使用本机查询。
列定义列表和返回record的查询是Hibernate不直接支持的PostgreSQL扩展。

关于hibernate - 在 hibernate 状态下使用@NamedStoredProcedureQuery时,列定义列表为必填消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22112695/

10-15 22:45