Hibernate: Mapping custom column names in stored procedure named query
Solution 1
You'll need to implement your own ResultTransformer. It's really simple, and you can look at the source of the bundled implementations for inspiration.
http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/transform/ResultTransformer.html
Solution 2
Based on @partenon's answer on using a custom ResultTransformer
, here's the final solution:-
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();
Comments
-
limc almost 2 years
I currently have the following named query that wraps around a stored procedure:-
<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>
The columns
name_first
andname_last
are the exact column names returned by the stored procedure. I created a bean that contains the same column names so that I can map the queried result into that bean.public class MyBean { private String name_first; private String name_last; ... }
The Hibernate code that calls the named query and map the result into the bean:-
MyBean myBean = (MyBean) sessionFactory.getCurrentSession() .getNamedQuery("mySp") .setParameter("param", param) .setResultTransformer(Transformers.aliasToBean(MyBean.class)) .uniqueResult();
All of these work fine, but instead of relying on the column names from the stored procedure, I want to use my own column names in
MyBean
, for example:-public class MyBean { private String firstName; // instead of name_first private String lastName; // instead of name_last ... }
How do I map my column names against the stored procedure's columns in my named query above?
Thanks.
UPDATE - I added my final solution below.
-
limc over 13 yearsThanks, I added my final solution in the
Answers
section. -
May12 over 8 yearslimc, do you have exception like: Exception in thread "main" java.lang.NullPointerException at org.hibernate.loader.Loader.processResultSet(Loader.java:950) at org.hibernate.loader.Loader.doQuery(Loader.java:921) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) at org.hibernate.loader.Loader.doList(Loader.java:2554) at org.hibernate.loader.Loader.doList(Loader.java:2540) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)?