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