3.2.1.1. 基础实体类
本节将详细介绍基础实体类和接口。
Instance
– 定义了使用应用程序领域对象的基本方法:获取对象元类的引用;
生成实例名称;
根据名称读写属性值;
添加监听器用于接收有关属性更改的通知。
Entity
– 继承自Instance
,添加了实体标识符;同时Entity
没有定义标识符的类型,该类型由其继承者决定。AbstractInstance
– 实现了使用属性更改监听器的逻辑。BaseGenericIdEntity
– 持久化和非持久化实体的基础类。实现了Entity
接口但没有指定实体标识符(即主键)的类型。EmbeddableEntity
- 可嵌入的持久化实体的基础类。
下面是关于在项目实体中继承基础实体的一些建议。非持久化实体应该继承与持久化实体相同的基类。框架是根据实体所在注册文件:persistence.xml 或 metadata.xml 来确定实体是否是持久化实体。
StandardEntity
继承自 StandardEntity
的实体带有一组标准功能:UUID 类型的主键、包含创建人和修改人及创建时间和修改时间、还支持乐观锁和软删除机制。
HasUuid
– 具有全局唯一标识符实体的接口。Versioned
– 支持 乐观锁实体的接口。Creatable
– 记录有关创建实例的时间和人员信息实体的接口。Updatable
– 记录有关上次修改实例的时间和人员的信息实体的接口。SoftDelete
– 支持软删除实体的接口。
BaseUuidEntity
继承自 BaseUuidEntity
的实体带有 UUID 类型主键,但不具备 StandardEntity
的所有功能。可以在具体实体类中有选择地实现一些接口,如 Creatable
、Versioned
等。
BaseLongIdEntity
继承自 BaseLongIdEntity
或 BaseIntegerIdEntity
的实体具有 Long
或 Integer
类型的主键。可以在具体实体类中有选择地实现一些接口,Creatable
、Versioned
等。强烈建议实现 HasUuid
,因为它可以提供一些优化,并可以确保实例在分布式环境中的唯一标识。
BaseStringIdEntity
继承自 BaseStringIdEntity
的实体具有 String
类型的主键。可以在具体实体类中有选择地实现一些接口,如 Creatable
、Versioned
等。强烈建议实现 HasUuid
,因为它可以提供一些优化,并可以确保实例在分布式环境中的唯一标识。具体实体类必须有一个使用 @Id
JPA 注解的字符串字段用来作为实体的主键。
BaseIdentityIdEntity
继承自 BaseIdentityIdEntity
的实体,会映射到具有 IDENTITY 主键的表。可以在具体实体类中有选择地实现一些接口,如 Creatable
、Versioned
等。强烈建议实现 HasUuid
,因为它可以实现一些优化,并可以确保实例在分布式环境中的唯一标识。实体的 id
属性(即 getId()
/setId()
)是 IdProxy
类型,用来替换真实标识符,真实标识符会在插入数据时由数据库生成。
BaseIntIdentityIdEntity
继承 BaseIntIdentityIdEntity
的实体,会映射到 Integer
类型的 IDENTITY 为主键的表(区别于 BaseIdentityIdEntity
中的 Long
)。在其它方面,BaseIntIdentityIdEntity
与 BaseIdentityIdEntity
类似。
BaseGenericIdEntity
除了上面情况之外,如果需要将实体映射到具有复合主键的表,则直接继承 BaseGenericIdEntity
。在这种情况下,具体实体类必须有一个嵌入类型的字段代表复合主键,并使用 @EmbeddedId
JPA 注解。