Hibernate:在存储过程命名查询中映射自定义列名

我目前有以下命名查询包装存储过程: –

    { call some_sp :param }   

name_firstname_last是存储过程返回的确切列名。 我创建了一个包含相同列名的bean,以便我可以将查询结果映射到该bean。

 public class MyBean { private String name_first; private String name_last; ... } 

调用命名查询并将结果映射到bean的Hibernate代码: –

 MyBean myBean = (MyBean) sessionFactory.getCurrentSession() .getNamedQuery("mySp") .setParameter("param", param) .setResultTransformer(Transformers.aliasToBean(MyBean.class)) .uniqueResult(); 

所有这些工作都很好,但我没有依赖存储过程中的列名,而是想在MyBean使用我自己的列名,例如: –

 public class MyBean { private String firstName; // instead of name_first private String lastName; // instead of name_last ... } 

如何将列名映射到上面命名查询中的存储过程列?

谢谢。

更新 – 我在下面添加了我的最终解决方案。

基于ResultTransformer关于使用自定义ResultTransformer的答案,这是最终的解决方案: –

 MyBean myBean = (MyBean) sessionFactory.getCurrentSession() .getNamedQuery("mySp") .setParameter("param", param) .setResultTransformer(new BasicTransformerAdapter() { private static final long serialVersionUID = 1L; @Override public Object transformTuple(Object[] tuple, String[] aliases) { String firstName = (String) tuple[0]; String lastName = (String) tuple[1]; return new MyBean(firstName, lastName); } }) .uniqueResult(); 

只需手动构建bean:

 Object[] columns = (Object[]) sessionFactory.getCurrentSession() .getNamedQuery("mySp") .setParameter("param", param) .uniqueResult(); MyBean myBean = new MyBean((String) columns[0], (String) columns[1]); 

这还有一个额外的好处:它允许您使MyBean不可变。

您可以使用此博客文章中描述的解决方案。 它工作得很好,可以很好地重复使用。