SSJ集成的步骤

集成步骤

1、创建项目,导包
2、配置Spring环境:spring.xml
	①、扫描包:扫描service层、Dao层
	②、配置数据库连接池,先引入jdbc.properties文件,配置数据库地址、用户名、密码
	③、配置FactoryBean集成JPA
	④、配置事务管理:TransactionManger
	⑤、开启事务管理的注解支持
3、domain实体类以及实体类之间的关系:多对一,多对多等
4、Dao层接口级实现类:抽取BaseDao方式
5、Service层接口及实现类:抽取BaseService
6、controller层暴露接口
7、SpringMVC配置文件
8、前端集成EasyUI,增删改查员工

遇到的问题:

1、No Session错误
原因:懒加载时就去加载员工所属部门数据的时候,发现EntityManager已经关闭
Controller层使用了@Response注解,用于将page方法返回的page对象转化为json字符串格式,然后将响应的消息体发送给浏览器
转化为JSON字符串,其本质就是调用该对象的每一个get方法,获取其属性值,当某一个属性是List集合时,会自动遍历循环获取每一个Employee对象的所有属性,也就是会调用Employee对象的属性的get方法,当获取到department属性时,调用get方法,由于配置的是懒加载,所以当再次获取department对象的属性值时,会去查询数据,但此时EntityManager早已关闭,所以会报No Session错误
解决方法:
将创建EntityManager对象的时机提前到Controller层,将关闭EntityManager对象的时间延后到Controller,也就是扩大EntityManager对象的作用域
具体做法:
在web.xml中添加OpenEntityManagerViewFilter过滤器

 <!-- 解决No Session错误 -->
<filter>
	<filter-name>OpenEntityManagerInViewFilter</filter-name>
	<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>OpenEntityManagerInViewFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

2、No Serializer错误
原因:
JAP的懒加载引起的,当调用对象的属性的get方法时,实际上返回的的对象时属性类的子类对象,JPA底层在实现懒加载原理的时候,不但在子类重写了父类所有属性的get方法,并且还额外添加了三个字段(“hibernateLazyInitializer”,“handler”,“fieldHandler”),但是这三个字段并没有添加get方法,所以No Serializer其实就表示找不到get方法而已(转化json字符串的时候要使用属性的get方 法,但是找不到这三个字段的get方法),所以报No Serializer错误。
解决方案:
在懒加载字段上面添加注解

@JsonIgnoreProperties({“hibernateLazyInitializer”,“handler”,“fieldHandler”})

表示在转化json字符串的时候忽略这三个字段

代码链接
https://blog.csdn.net/qq_43199561/article/details/105646847

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值