### JPA批注详解 Java持久化API (JPA) 是Java企业版5(JavaEE5) Enterprise JavaBean (EJB) 3.0规范的一部分,它的引入极大地简化了EJB的持久化过程,同时也提供了一种声明式的方法来定义Java对象如何被映射到关系数据库表中,这种映射方式既适用于JavaEE5应用服务器内部,也适用于Java标准版(JavaSE)5应用程序中的EJB容器外部。 #### 实体批注:`@Entity` 在JPA中,`@Entity`批注是用于标记一个普通的旧式Java对象(POJO)类为JPA实体的关键批注。一旦类被`@Entity`修饰,JPA持久性提供者就能识别这个类并处理其非瞬态字段,使其能够被持久化到关系数据库中。在使用`@Entity`批注时,实体类的默认假设是其名称对应于同名的数据库表,且其实例的字段名称对应于同名的数据库列。但是,开发者可以通过其他批注来覆盖这些默认行为,从而更精细地控制实体与数据库之间的映射关系。 #### 数据库模式属性批注:`@Table`, `@SecondaryTable`, `@SecondaryTables`, `@Column`, `@JoinColumn`, `@JoinColumns`, `@PrimaryKeyJoinColumn`, `@PrimaryKeyJoinColumns`, `@JoinTable`, `@UniqueConstraint` 这些批注允许开发者对实体类的数据库表结构进行定制化的配置。例如,`@Table`批注可以用来指定实体对应的数据库表的名字;`@Column`批注则用于指定实体的某个字段在数据库中的具体列名、数据类型等细节;而`@JoinColumn`和`@JoinColumns`等批注则用于配置实体间的关联关系,尤其是在多对一或一对多的关系中,它们帮助指明数据库表间是如何通过外键连接的。 #### 身份批注:`@Id`, `@IdClass`, `@EmbeddedId`, `@GeneratedValue`, `@SequenceGenerator`, `@TableGenerator` `@Id`批注用于标记实体中的某个字段或属性作为主键。`@GeneratedValue`批注则进一步指定了主键的生成策略,如自增(auto-increment)或序列(sequence)。`@SequenceGenerator`和`@TableGenerator`则提供了更为灵活的主键生成机制,允许开发者指定序列或表作为主键值的来源。 #### 直接映射批注:`@Basic`, `@Enumerated`, `@Temporal`, `@Lob`, `@Transient` 这些批注用于细化基本类型的映射规则。例如,`@Basic`批注可以显式地指定一个字段是否应该被持久化;`@Enumerated`用于枚举类型的映射;`@Temporal`用于日期时间类型的映射;`@Lob`用于大对象类型的映射;`@Transient`则用于标注那些不希望被持久化的字段。 #### 关系映射批注:`@OneToOne`, `@ManyToOne`, `@OneToMany`, `@ManyToMany`, `@MapKey`, `@OrderBy` 这些批注用于定义实体间的一对一、一对多、多对一和多对多关系。例如,`@OneToOne`用于一对一的关系;`@ManyToOne`和`@OneToMany`分别用于多对一和一对多的关系;而`@ManyToMany`则用于多对多的关系。 #### 组合批注:`@Embeddable`, `@Embedded`, `@AttributeOverride`, `@AttributeOverrides`, `@AssociationOverride`, `@AssociationOverrides` 这些批注用于处理嵌套实体和属性的映射问题。例如,`@Embeddable`和`@Embedded`用于标记一个实体作为另一个实体的嵌入式属性;`@AttributeOverride`和`@AttributeOverrides`用于覆盖嵌入式实体中属性的映射细节;`@AssociationOverride`和`@AssociationOverrides`则用于覆盖实体间关系的映射细节。 #### 继承批注:`@Inheritance`, `@DiscriminatorColumn`, `@DiscriminatorValue`, `@MappedSuperclass` 这些批注用于处理实体类的继承关系。`@Inheritance`批注指定了继承策略,`@DiscriminatorColumn`和`@DiscriminatorValue`则用于区分不同子类的实例,`@MappedSuperclass`用于标记一个非实体超类,其子类将继承其中的持久化属性和映射规则。 通过使用上述批注,开发者能够更加灵活和精确地控制实体与数据库之间的映射关系,从而实现更高效和更符合业务需求的持久化解决方案。
剩余107页未读,继续阅读
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
- (源码)基于Java和MySQL的学生信息管理系统.zip
- (源码)基于ASP.NET Core的零售供应链管理系统.zip