我目前有以下环绕存储过程的命名查询:-
<hibernate-mapping> <sql-query name="mySp"> <return-scalar column="name_first" type="string" /> <return-scalar column="name_last" type="string" /> { call some_sp :param } </sql-query> </hibernate-mapping>
列name_first和name_last是存储过程返回的确切列名。我创建了一个包含相同列名的bean,以便可以将查询的结果映射到该bean中。
name_first
name_last
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,例如:
MyBean
public class MyBean { private String firstName; // instead of name_first private String lastName; // instead of name_last ... }
如何在上面的命名查询中将列名与存储过程的列相对应?
谢谢。
更新 -我在下面添加了最终解决方案。
您需要实现自己的ResultTransformer。这真的很简单,您可以查看捆绑实现的来源以获取灵感。
http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/transform/ResultTransformer.html
https://github.com/hibernate/hibernate-core/tree/master/hibernate- core/src/main/java/org/hibernate/transform