博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate数据类型及JPA的Entity类与Hibernate的Entity类的区别
阅读量:4179 次
发布时间:2019-05-26

本文共 1326 字,大约阅读时间需要 4 分钟。

Entity类型是Hibernate数据类型之一,Hibernate的另一种数据类型是Value类型。

1. Hibernate的Value类型

Value类型是基本的数据类型,这些数据没有独立的生命周期,其具体的生命周期依赖于所在的父类。Value类型又可以细分为如下类型:

  • 基本类型,如BooleanType、CharacterType
@javax.persistence.Basic(optional=true, fetch="EAGER")
  • 嵌套组合类型

@javax.persistence.Embeddable

  • 集合类型
2. Hibernate的Entity类型
Entity类型描述了可持久化对象与数据库表记录之间的映射关系。Entity类的实例往往有唯一标识,有独立的生命周期。
由于Hibernate既实现了JPA API,又提供了独特的Hibernate API,所以定义Entity类可以分别使用如下标注:
  • @javax.persistence.Entity
  • @org.hibernate.annotations.Entity
那么,两种API下的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类之外的其他方法访问。
参考文献:
http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html

转载地址:http://nnlai.baihongyu.com/

你可能感兴趣的文章
dynamic-datasource动态多数据源整合hive impala
查看>>
Mybatis+impala插入超过510个字符串的字段报:HIVE_PARAMETER_QUERY_DATA_TYPE_ERR_NON_SUPPORT_DATA_TYPE
查看>>
SpringBoot项目启动完成自动打开网址
查看>>
记录一下把mapper.xml文件放在java的坑
查看>>
反射的使用
查看>>
使用Stream排序分组
查看>>
linux安装mysql 5.7.23二进制 安装jdk tomcat
查看>>
mysql总结 windows 版本
查看>>
POI 导出工具类
查看>>
HTTP请求工具类
查看>>
Ngnix+tomcat 集群以及session共享
查看>>
Nginx配置多个项目放在不同的tomcat中,共享同一个端口
查看>>
mysql的JDBC连接工具类
查看>>
ORACLE的JDBC连接工具类
查看>>
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>
定长线程池的应用
查看>>
生产者和消费者模式
查看>>
ArrayBlockingQueue的简单使用
查看>>
Git 常用命令总结(一)
查看>>