1、hibernate执行原生sql时,如何导出非hibernate管理的实体类
SQLQuery query = session.createSQLQuery(sql);
//绑定非hibernate管理的实体类
query.setResultTransformer(Transformers.aliasToBean(LastResponse.class));
//指定字段类型,务必全指定
query.addScalar("ticketId", LongType.INSTANCE);
query.addScalar("languageCode", StringType.INSTANCE);
query.addScalar("merchantId", StringType.INSTANCE);
query.addScalar("merchantOrdersId", StringType.INSTANCE);
query.addScalar("deliveryCountry", StringType.INSTANCE);
query.addScalar("body", StringType.INSTANCE);
2、could not initialize proxy - no Session
原因:
这是因为Hibernate的懒加载策略,在Hibernate中是使用sessionFactory来管理session,我们每进行一次数据库操作时
都会新建一个session对象,当我们操作完成后,hibernate就会在dao层立即关闭该session。这样做就可以严格控制
session,避免出现低级错误。
方案:
响应结束后才关闭session
<!-- 防止懒加载导致no session-->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>