Spring Data Jpa(一)
2019-11-26 本文已影响0人
筑梦_Dream
概述
首先JPA是一种ORM框架的规范,Hibernate和Spring data都是实现了这个规范的框架,所以在一些概念上两者相似。
实体状态
- 新建:实体对象刚刚new出来,还没进行save等操作。
- 托管:实体对象关联了session。
- 游离:实体与session失联。
- 销毁:实体被执行remove等方法。
使用事项
- 实体在托管状态时,因与session关联,此时对实体进行属性修改,在事务提交后,实体修改后的属性会自动提交到数据库,但spring data的save方法执行后修改属性,则不会自动刷新,因为这些方法带有事务注解,用EntityManager的persist方法则可以。
- Spring的事务嵌套问题,如果调用一个方法,此方法不带有事务注解,但此方法内部调用一个带有事务的方法,那么这个方法事务会失效,解决办法是将事务添加到调用者,或者将被调方法移到其他类等等。
- 如果一个带有事务的方法调用另一个带有事务的方法,但调用时使用了try catch,那么另一个方法出错会标记回滚,但是在调用方却未抛出异常,这时即使调用方提交,也会出现 “已经标记异常,不能提交”的错误,解决办法可以是,try方取消事务标记或者不要try一个标记事务的方法。