如何使用具有注释字段的别名Bean Class在hibernate中查询?

时间:2016-11-10 06:10:31

标签: java spring hibernate

在hibernate中,我正在创建如下的自定义查询。

Query query = getSession()
            .createSQLQuery(
                    "select t2.* from ( select (select id from ctc_ver_assets ti where ti.ctcassettag = t1.ctcassettag  order by ti.createddate desc limit 1) lid from "
                            + "( select distinct ctcassettag from ctc_ver_assets) t1) ro, ctc_ver_assets t2 where t2.id = ro.lid and date(createddate) ")
            .setResultTransformer(Transformers.aliasToBean(VerificationAsset.class));

我的verificationAsset类包含字段ctcAssetTag,但表中的字段名称是ctcassettag。如何自动将其映射到对象?

我可以像t2.ctcassettag as ctcAssetTag一样重命名查询中的各个字段。但是我不想为每个字段都这样做,因为我已经在我的Bean类中注释了每个字段,如下所示

@Column(name = "ctcassettag", unique = true, nullable = false)
private String ctcAssetTag;

当我使用标准时它工作正常。如何用查询实现相同的目标?

1 个答案:

答案 0 :(得分:0)

解决方案1:

您可以使用alias_to_entity_map,因此您无需声明型号名称。它会根据您的查询映射您的结果。

解决方案2:

您可以在模型中创建@transient字段,以根据需要映射字段。

solution3:

您可以创建DTO并在aliasToBean(VerificationAssetDTO.class)中使用它而不是您的解决方案。