Spring整合JPA时,为实体类添加@Entity注解时提示The type MultipartEntity is deprecated

2019/04/16 13:36
阅读数 84

这个情况是由于导入错了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

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部