【问题标题】:How does a native sql query bind fields to an entity instead of map本机 sql 查询如何将字段绑定到实体而不是映射
【发布时间】:2015-10-09 07:28:06
【问题描述】:

我尝试使用 resulttransformer (AliasToBeanResultTransformer) 运行本机 sql 查询,它给出如下错误。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.ozpas.ozentegre.entity.EntDevirlog cannot be cast to java.util.Map
    at org.hibernate.property.access.internal.PropertyAccessMapImpl$SetterImpl.set(PropertyAccessMapImpl.java:102)
    at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:78)

顺便说一句,我的原生 sql 查询不包括实体 (EntDevirlog) 中的所有字段,该实体中只有一些字段。查询是否应包括实体中的所有字段?

据我了解,休眠将结果转换为地图对象而不是 EntDevirlog 实体。它使用 PropertyAccessMapImpl。我怎样才能解决这个问题以将结果作为列表(arraylist)?谢谢。

    Session session = HibernateUtilMikro.getSessionFactory().openSession();

    List<EntDevirlog> results = new ArrayList<EntDevirlog>();
    Transaction tx = null;

String sql =  "mynativequery";

SQLQuery query = session.createSQLQuery(sql);

query.setParameter("tarih", tarih);
query.setParameter("srmkodu", srmkodu);

query.setParameter("s1", EnumPanoislemtipleri.islem1.getValue());
query.setParameter("s2", EnumPanoislemtipleri.islem2.getValue());


query.setResultTransformer(new AliasToBeanResultTransformer(EntDevirlog.class));

results = query.list();
            tx.commit();

【问题讨论】:

  • 尝试修改HibernateUtilMikro.getSessionFactory().openSession().getSession(EntityMode.POJO)
  • 没有像 getSession (EntityMode.POJO) 这样的方法,我使用 Hibernate 5

标签: java hibernate


【解决方案1】:

只需使用引号作为别名

"select firstName as \"firstName\", 
    lastName as \"lastName\" from Employee"

在此处阅读以获取更深入的解释: mapping Hibernate query results to custom class?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2017-05-13
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多