常见问题汇总(六)——关于Hibernate

今天药忘吃喽~ 2022-05-23 12:57 361阅读 0赞

1、hibernate执行原生sql时,如何导出非hibernate管理的实体类

  1. SQLQuery query = session.createSQLQuery(sql);
  2. //绑定非hibernate管理的实体类
  3. query.setResultTransformer(Transformers.aliasToBean(LastResponse.class));
  4. //指定字段类型,务必全指定
  5. query.addScalar("ticketId", LongType.INSTANCE);
  6. query.addScalar("languageCode", StringType.INSTANCE);
  7. query.addScalar("merchantId", StringType.INSTANCE);
  8. query.addScalar("merchantOrdersId", StringType.INSTANCE);
  9. query.addScalar("deliveryCountry", StringType.INSTANCE);
  10. query.addScalar("body", StringType.INSTANCE);

2、could not initialize proxy - no Session

原因:

这是因为Hibernate的懒加载策略,在Hibernate中是使用sessionFactory来管理session,我们每进行一次数据库操作时

都会新建一个session对象,当我们操作完成后,hibernate就会在dao层立即关闭该session。这样做就可以严格控制

session,避免出现低级错误。
方案:

响应结束后才关闭session

  1. <!-- 防止懒加载导致no session-->
  2. <filter>
  3. <filter-name>hibernateFilter</filter-name>
  4. <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>hibernateFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

发表评论

表情:
评论列表 (有 0 条评论,361人围观)

还没有评论,来说两句吧...

相关阅读