1、EntityNotFoundException(
實體不存在異常):?
通過 JPA 查找一個不存在的實體。
2、NonUniqueResultException(非唯一結果異常): 查詢返回了多個結果,但期望只有一個結果。
3、TransactionRequiredException
?(需要事務支持的異常)
表示在執行一個需要在事務中進行的操作時,但當前沒有活動的事務。這通常發生在沒有事務管理的環境中,或者在執行需要事務的操作時沒有啟動事務。
具體案例:
一個簡單的服務類,執行了需要在事務中進行的數據庫更新操作。
4、Spring Data Jpa拋出異常:NonUniqueObjectException
框架使用的SpringBoot,首先談論一下Jpa、Spring Data Jpa、Hibernate三者的關系:
- JPA的是 Java Persistence API 的簡寫,是Sun官方提出的一種ORM規范,注意不是ORM框架——因為JPA并未提供ORM實現,它只是制訂了一些規范,提供了一些編程的API接口,但具體實現則由服務廠商來提供實現。
- Hibernate是JPA規范的完整實現。并已獲得Sun的兼容認證。
- Spring Data JPA是Spring官方在JPA規范的基礎下,只提供了Repository層的實現。
????????因此,SpringBoot中的ORM框架也是有Hibernate的。這個異常就是Hibernate拋出的。
熟悉Hibernate的應該會知道它的緩存。
????????如果用戶試圖將同一個Java類的兩個不同實例與一個特定標識符(在一個Session范圍內)關聯,就會發生這種情況。將拋出NonUniqueObjectException異常,其實也就是出現主鍵不唯一的意思。
????????所以要在主鍵id
上添加注解@GeneratedValue(strategy = GenerationType.IDENTITY)
,就是告訴它這個主鍵會由數據庫自動生成。因此在緩存中會給每個實例添加一個標識,用以區分所有的實例,在提交給數據庫后并不會對主鍵id
產生影響。