当前位置: 首页 > 面试题库 >

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

孟绪
2023-03-14
问题内容

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

<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

    ...
}

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

谢谢。

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


问题答案:

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



 类似资料:
  • 问题内容: 我将Hibernate用作我们的对象关系映射,并为晦涩的数据库使用了自定义方言。 我从该数据库中检索的实体具有一列,因此: 数据库将此列定义为数字,精度为9,小数位数为3。 我可以看到Hibernate生成的用于检索数据的SQL,当我使用数据库查询工具执行相同的查询时,它为GROSS_WEIGHT列返回“ 9.68”。 但是,在由Hibernate检索的Entity中,“ grossW

  • 我使用Hibernate作为我们的对象关系映射,为一个模糊的数据库使用自定义方言。 我从这个数据库检索的实体有一个列,因此: 数据库将此列定义为数字,精度为9,刻度为3。 我可以看到Hibernate生成的检索数据的SQL,当我使用数据库查询工具执行相同的查询时,它会返回GROSS_WEIGHT列的9.68。 但是,在Hibernate检索到的实体中,“GrossWight”字段包含值“10”,其

  • 我正在我的项目中实现Hibernate Envers,对于这个客户端,数据库中的表和列必须遵循特定的名称模式。name模式使用表名来生成列名的一部分,保存修订的表与原始表有不同的名称(当然),因此我需要能够更改Envers生成的表的列名。 如何更改实体试听表的列名称? 我正在使用Hibernate 4.3.11-FINAL 我毫不费力地喊出修订表(REVINFO)名称,也没有列实体的试镜表名称

  • 这里的问题是映射,我需要强制转换结果或手动检查一切。即使有更好的映射能力,我也不敢相信没有更好的方法来做到这一点。 我也试过这样做:https://stackoverflow.com/a/36329166/840315,但您需要将类路径硬编码到查询中以使其工作,而且我仍然需要将对象映射到不可变的对象。 使用JdbcTemplate,您可以使用(src): spring data JPA是否有类似的

  • 现在,问题是,虽然我可以获得存储过程返回的结果,但该结果没有转换为Java类(TNapraviNalog),所以我必须手动执行此操作。我可以用TNapraviNalog的实例(stmt.SetObject(1,ParamValues.get(0));)成功调用Oracle过程,但无法将结果转换为TNapraviNalog。我真的很想有一个 但是,这一行会导致异常(java.lang.ClassCa

  • 我有一个简单的类客户端: ,clientrepository: ,ClientrepositoryCustom: 我在选择名字方面有哪一级的自由?这可能吗?是否有一个触发词,如果我想要一个与我实体的属性无关的名称,我必须使用它? 如果我查询两个属性。似乎我可以编写类似这样的方法,但我不希望有一个带有与方法名无关的附加参数的方法。 提前感谢,任何反馈都很感激!