ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、实体状态 Transient Persistent Detached Delete ![](https://img.kancloud.cn/28/5b/285be529ae44ea1eb5c654403cf53ba7_536x219.png) ## 二、业务逻辑 持久的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。 JPA会检测到处于持久状态的对象的任何改动,在当前操作单元执行完毕时将对象数据(state)与数据库同步,开发者不需要手动执行save; >[danger] > 1、JPA操作的时候,通过调用save/saveAndFlush,可以把实体变为持久态,但需要注意的是,进入持久态的,是save/saveAndFlush的返回值,而不是传入的对象; > 2、save之后,原对象自动获取到对象的主键了,不必从返回值中拿主键; > 3、如果一个对象是持久态的,可以通过entityManager的deatch或evict,将其从session中脱离关联; 参考代码: ![](https://img.kancloud.cn/23/ca/23ca7ea89acc556474dbcc49bb0c64c4_1231x172.png) ![](https://img.kancloud.cn/ec/dc/ecdcd56d688f8bf93f946c8f6dbee4cf_832x444.png) ## 三、实战 #### 1、需带@Transactional; #### 2、save/saveAndFlush之后,其返回值(注意:非save传入的对象),处于持久态,后续的改动,自动会同步,不必手动再save; 例如: ![](https://img.kancloud.cn/89/3b/893b8d53299f77630cbbb6fc8d950794_696x158.png) 将不能把descCnt字段的值改变为abc;下面的代码则可以; ![](https://img.kancloud.cn/ea/e6/eae6ae0e82999fba67c38153c14028cb_697x165.png) #### 3、findById,getOne等返回值,也是处于持久态的实体; 例如: ![](https://img.kancloud.cn/9d/b4/9db4d84d7f45a065505557c228432f0e_711x178.png) #### 4、需要托管session的时候 1、继承extends BaseOperatorAsRepository ![](https://img.kancloud.cn/16/ea/16eaf501598c7bddea94ec39635a87bf_847x122.png) 2、调用EntityManager的方法 ![](https://img.kancloud.cn/19/4e/194e915e92d6a906918f424a6fc1d07c_1079x551.png)