1、数据库模式属性默认情况下,JPA 持续性提供程序假设实体名称对应于同名的数据库表,且实体的数据成员名称对应于同名的数据库列。使用这些批注覆盖此默认行为,并微调对象模型与数据模型之间的关系。TableSecondaryTableSecondaryTablesColumnJoinColumnJoinColumnsPrimaryKeyJoinColumnPrimaryKeyJoinColumnsJoinTableUniqueConstraint身份默认情况下,JPA 持续性提供程序假设每个实体必须至少有一个用作主键的字段或属性。使用这些批注指定以下项之一: 一个 Id 多个 Id 和一个 IdCla
2、ss 一个 EmbeddedId还可以使用这些批注微调数据库维护实体身份的方式。IdIdClassEmbeddedIdGeneratedValueSequenceGeneratorTableGenerator直接映射默认情况下,JPA 持续性提供程序为大多数 Java 基元类型、基元类型的包装程序以及 enums 自动配置一个 Basic 映射。使用这些批注微调数据库实现这些映射的方式。BasicEnumeratedTemporalLobTransient关系映射JPA 持续性提供程序要求您显式映射关系。使用这些批注指定实体关系的类型和特征,以微调数据库实现这些关系的方式。OneToOneMa
3、nyToOneOneToManyManyToManyMapKeyOrderBy组合默认情况下,JPA 持续性提供程序假设每个实体均映射到它自己的表。使用这些批注覆盖其他实体拥有的此种实体行为。EmbeddableEmbeddedAttributeOverrideAttributeOverridesAssociationOverrideAssociationOverrides继承默认情况下,JPA 持续性提供程序假设所有持久字段均由一个实体类定义。如果实体类继承了一个或多个超类中的某些或所有持续字段,则使用这些批注。InheritanceDiscriminatorColumnDiscrimina
4、torValueMappedSuperclass锁定默认情况下,JPA 持续性提供程序假设应用程序负责数据一致性。使用此批注启用 JPA 管理的乐观锁定(推荐使用)。Version生命周期回调事件默认情况下,JPA 持续性提供程序处理所有持续性操作。如果您要在实体生命周期内随时调用自定义逻辑,请使用这些批注将实体方法与 JPA 生命周期事件关联。图 1-1 演示了这些生命周期事件之间的关系。PrePersistPostPersistPreRemovePostRemovePreUpdatePostUpdatePostLoadEntityListenersExcludeDefaultListene
5、rsExcludeSuperclassListeners实体管理器在使用 JPA 持续性提供程序的应用程序中,您可以使用 EntityManager 实例执行所有持续性操作(创建、读取、更新和删除)。使用这些批注将实体与实体管理器关联并自定义实体管理器的环境。PersistenceUnitPersistenceUnitsPersistenceContextPersistenceContextsPersistenceProperty查询在使用 JPA 持续性提供程序的应用程序中,可以使用实体管理器动态创建和执行查询,也可以预定义查询并在运行时按名称执行它们。使用这些批注预定义查询并管理它们的结果
6、集。NamedQueryNamedQueriesNamedNativeQueryNamedNativeQueriesQueryHintColumnResultEntityResultFieldResultSqlResultSetMappingSqlResultSetMappings默认情况下,JPA 持续性提供程序自动假设子类继承超类中定义的持久属性及其关联映射。如果继承的列定义对实体不正确(例如,如果继承的列名与已经存在的数据模型不兼容或作为数据库中的列名无效),请使用 AssociationOverride 批注自定义从 MappedSuperclass 或 Embeddable 继承的
7、OneToOne 或 ManyToOne 映射,以更改与字段或属性关联的 JoinColumn。如果有多个要进行的 AssociationOverride 更改,则必须使用 AssociationOverrides。要自定义基本映射以更改它的 Column,请使用 AttributeOverride。表 1-4 列出了此批注的属性。有关更多详细信息,请参阅 API。表 1-2 AssociationOverride 属性属性必需joinColumns要指定映射到持久属性的连接列,请将 joinColums 设置为 JoinColumn 实例的数组(请参阅 JoinColumn)。映射类型将与可
8、嵌套类或映射的超类中定义的类型相同。name如果使用了基于属性的访问,则映射的为嵌入对象中的属性名称,如果使用了基于字段的访问,则映射的为字段名称。示例 1-4 显示了示例 1-5 中的实体扩展的 MappedSuperclass。示例 1-5 显示了如何在实体子类中使用 AssociationOverride 覆盖 MappedSuperclass Employee 中定义(默认情况下)的 JoinColumn 以便关联到 Address。如果使用 AssociationOverride,则 Employee 表包含以下列: ID VERSION ADDR_ID WAGE如果不使用 Asso
9、ciationOverride,则 Employee 表包含以下列: ADDRESS示例 1-1 MappedSuperclasspublic class Employee Id protected Integer id;Version protected Integer version;ManyToOne protected Address address;示例 1-2 AssociationOverrideEntityAssociationOverride(name=address, joinColumns=JoinColumn(name=ADDR_ID)public class Part
10、TimeEmployee extends Employee Column(name=WAGE) protected Float hourlyWage;如果需要指定多个 AssociationOverride,则必需使用一个 AssociationOverrides 批注指定所有关联覆盖。表 1-5 列出了此批注的属性。表 1-3 AssociationOverrides 属性value要指定两个或更多覆盖,请将 value 设置为 AssociationOverride 实例的数组(请参阅 AssociationOverride)。示例 1-6 显示了如何使用此批注指定两个关联覆盖。示例 1-
11、3 AssociationOverridesAssociationOverrides(AssociationOverride(name=, joinColumn=Column(name=),idPTID)public class PartTimeEmployee extends Employee Column(name=)protected Float hourlyWage;默认情况下,JPA 持续性提供程序自动假设子类继承超类中定义的持久属性及其基本映射。如果针对实体继承的列定义不正确,请使用 AttributeOverride 批注自定义一个从 MappedSuperclass 或 Emb
12、eddable 继承的基本映射以更改与字段或属性关联的 Column。(例如,如果继承的列名与事先存在的数据模型不兼容,或者作为数据库中的列名无效)。如果有多个要进行的 AttributeOverride 更改,则必须使用 AttributeOverrides。要自定义关联映射以更改它的 JoinColumn,请使用 AssociationOverride。表 1-4 AttributeOverride 属性column映射到持久属性的 Column。映射类型将与可嵌套类或映射超类中定义的类型相同。示例 1-5 显示了如何使用实体子类中的 AttributeOverride 覆盖 Mapped
13、Superclass Employee 中定义(默认情况下)的 Column,以便基本映射到 Address。如果使用 AttributeOverride,则 Employee 表包含以下列: ADDR_STRING如果不使用 AttributeOverride,则 Employee 表包含以下列:示例 1-4 MappedSuperclassprotected String address; . 示例 1-5 AttributeOverrideAttributeOverride(name=, column=Column(name=ADDR_STRING如果需要指定多个 AttributeOv
14、erride,则必需使用一个 AttributeOverrides 批注指定所有属性覆盖。表 1-5 AttributeOverrides 属性要指定两个或更多属性覆盖,请将 value 设置为 AttributeOverride 实例的数组(请参阅 AttributeOverride)。示例 1-6 显示了如何使用此批注指定两个属性覆盖。示例 1-6 AttributeOverridesAttributeOverrides(public PartTimeEmployee() public Float getHourlyWage() public void setHourlyWage(Floa
15、t wage) 默认情况下,JPA 持续性提供程序为大多数 Java 基元类型、基元类型的包装程序以及枚举自动配置一个 Basic 映射。使用 Basic 批注: 将获取类型配置为 LAZY 如果空值不适合于应用程序,则将映射配置为禁止空值(针对非基元类型)表 1-6 列出了此批注的属性。表 1-6 Basic 属性fetch默认值:FetchType.EAGER。默认情况下,JPA 持续性提供程序使用获取类型 EAGER:这将要求持续性提供程序运行时必须迫切获取数据。如果这不适合于应用程序或特定的持久字段,请将 fetch 设置为 FetchType.LAZY:这将提示持续性提供程序在首次访
16、问数据(如果可以)时应不急于获取数据。optionaltrue。默认情况下,JPA 持续性提供程序假设所有(非基元)字段和属性的值可以为空。如果这并不适合于您的应用程序,请将 optional 设置为 false。示例 1-7 显示了如何使用此批注为基本映射指定获取类型 LAZY。示例 1-7 BasicBasic(fetch=LAZY)protected String getName() return name;默认情况下,JPA 持续性提供程序假设每个实体的持久字段存储在其名称与持久字段的名称相匹配的数据库表列中。使用 Column 批注: 将持久字段与其他名称关联(如果默认列名难于处理、
17、与事先存在的数据模型不兼容或作为数据库中的列名无效) 将持久字段与辅助表中的列关联(请参阅 SecondaryTable) 微调数据库中列的特征表 1-7 列出了此批注的属性。表 1-7 Column 属性columnDefinition空 String。默认情况下,JPA 使用最少量 SQL 创建一个数据库表列。如果需要使用更多指定选项创建的列,请将 columnDefinition 设置为在针对列生成 DDL 时希望 JPA 使用的 SQL 片断。注意:捕获批注中的 DDL 信息时,某些 JPA 持续性提供程序可以在生成数据库模式时使用此 DDL。例如,请参阅“用于 Java2DB 模式生
18、成的 TopLink JPA 扩展”。insertable默认情况下,JPA 持续性提供程序假设所有列始终包含在 SQL INSERT 语句中。如果该列不应包含在这些语句中,请将 insertable 设置为 false。length 255默认情况下,JPA 持续性提供程序假设所有列在用于保存 String 值时的最大长度为 255 个字符。如果该列不适合于您的应用程序或数据库,请将 length 设置为适合于您的数据库列的 int 值。JPA 持续性提供程序假设实体的每个持久字段都存储在其名称与持久字段或属性的名称相匹配的数据库表列中。要指定其他列名,请将 name 设置为所需的 Stri
19、ng 列名。nullable默认情况下,JPA 持续性提供程序假设允许所有列包含空值。如果不允许该列包含空值,请将 nullable 设置为 false。precision 0.默认情况下,JPA 持续性提供程序假设所有列在用于保存十进制(精确数字)值时的精度为 0。如果该精度不适合于您的应用程序或数据库,请将 precision 设置为相应的 int 精度。scale默认情况下,JPA 持续性提供程序假设所有列在用于保存十进制(精确数字)值时的伸缩度为 0。如果该伸缩度不适合于您的应用程序或数据库,请将 scale 设置为相应的 int 精度。tableJPA 持续性提供程序假设实体的所有持
20、久字段都存储到一个其名称为实体名称的数据库表中(请参阅 Table)。如果该列与辅助表关联(请参阅 SecondaryTable),请将 name 设置为相应辅助表名称的 String 名称,如示例 1-8 所示。uniquefalse。默认情况下,JPA 持续性提供程序假设允许所有列包含重复值。如果不允许该列包含重复值,请将 unique 设置为 true。设置为 true 时,这相当于在表级别使用 UniqueConstraint。updatable默认情况下,JPA 持续性提供程序假设列始终包含在 SQL UPDATE 语句中。如果该列不应包含在这些语句中,请将 updatable 设置
21、为 false。示例 1-8 显示了如何使用此批注使 JPA 将 empId 持久保存到辅助表 EMP_HR 中的列 EMP_NUM。默认情况下,JPA 将 empName 持久保存到主表 Employee 中的列 empName。示例 1-8 ColumnSecondaryTable(name=EMP_HREMP_NUM, table=private Long empId;private String empName;执行 NamedNativeQuery 时,它可以返回实体(包括不同类型的实体)、标量值或实体和标量值的组合。使用 ColumnResult 批注返回标量值。标量类型由您在 C
22、olumnResult 中标识的列类型确定。有关详细信息,另请参阅 EntityResult、FieldResult 和 SqlResultSetMapping。表 1-8 列出了此批注的属性。表 1-8 ColumnResult 属性在原生 SQL 查询的 SELECT 语句中将 name 设置为列名的 String 等效形式。如果在 SELECT 中使用列别名(AS 语句),则将 name 设置为列别名。示例 1-9 显示了如何使用此批注将 Item(请参阅示例 1-10)标量 name 包含在结果列表(请参阅示例 1-11)中。在该示例中,结果列表将为 Object 数组的 List,如:Order, Shoes
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1