一尘不染

Hibernate:在名为query的存储过程中映射自定义列名称

hibernate

我目前有以下环绕存储过程的命名查询:-

<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_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

    ...
}

如何在上面的命名查询中将列名与存储过程的列相对应?

谢谢。

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


阅读 197

收藏
2020-06-20

共1个答案

一尘不染

您需要实现自己的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

2020-06-20