1. 程式人生 > >Spring整合JPA時,為實體類添加@Entity註解時提示The type MultipartEntity is deprecated

Spring整合JPA時,為實體類添加@Entity註解時提示The type MultipartEntity is deprecated

持久化 spring implement ... 分享 實例變量 規範 動態 狀態

這個情況是由於導入錯了Entity包所導致的。

按住Alt+T時,會有兩個關於@Entity的提示 org.hibernate.annotations.Entity 和 javax.persistence.Entity,我們應該使用javax.persistence.Entity。此時就不會出現過時的提示。

@org.hibernate.annotations.Entity 和 @javax.persistence.Entity 的區別:

JPA的Entity類和Hibernate的Entity類都符合Java對象的POJO模型,具體定義如下:
1) JPA 2.1規範的Entity類
Entity類必須被明確聲明,這可以通過@javax.persistence.Entity標註或者XML配置文件。

Entity類必須是top-level的類。
為了支持運行時動態代理實現的延遲加載,Entity類必須定義一個public或protected的無參數的構造函數,還可以有其他構造函數。
為了支持運行時動態代理實現的延遲加載,Entity類不能是final的,其中的方法或實例變量都不能是final的。
如果Entity類的對象可能會被遠程調用,則Entity類還必須實現java.io.Serializable接口。
Entity類可以是抽象類。Entity類可以繼承非Entity類和Entity類,而非Entity類也可以繼承Entity類。
Enum或接口不能被聲明為Entity。
Entity類的持久化狀態是通過Entity類的實例變量表示的。實例變量只能通過Entity類中的方法訪問。
2) Hibernate的Entity類基本與JPA 2.1規範的Entity類類似,只有如下區別
Entity類必須定義一個非private(即可以是public、protected或默認)的無參數的構造函數,還可以有其他構造函數。
Entity類不必是top-level的類。
Entity類不必是final的,其中的方法或實例變量也不必是final的。但如果是final的,則無法利用代理的延遲加載功能。
Entity類的實例變量可以被Entity類之外的其他方法訪問
Always import @javax.persistence.Entity


@org.hibernate.annotations.Entity是@javax.persistence.Entity的一個補充,但不是後者的替代品


如果想使用@org.hibernate.annotations.Entity所包含的特殊的功能的話,需要在添加@javax.persistence.Entity的基礎上增加註釋,如下:

技術分享圖片
1 //optimisticLock 樂觀鎖
2 @Entity   
3 @org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL)   
4 public class MyEntity implements Serializable {   
5 ...   
6 }  
Hibernate5-Entity

Spring整合JPA時,為實體類添加@Entity註解時提示The type MultipartEntity is deprecated