3.2.1.1. 基础实体类
本节将详细介绍基础实体类和接口。
-
Instance
– 定义了使用应用程序领域对象的基本方法:-
获取对象元类的引用;
-
生成实例名称;
-
根据名称读写属性值;
-
添加监听器用于接收有关属性更改的通知。
-
-
Entity
– 继承自Instance
,添加了实体标识符;同时Entity
没有定义标识符的类型,该类型由其继承者决定。 -
AbstractInstance
– 实现了使用属性更改监听器的逻辑。 -
BaseGenericIdEntity
– 持久化和非持久化实体的基础类。实现了Entity
接口但没有指定实体标识符(即主键)的类型。 -
EmbeddableEntity
- 可嵌入的持久化实体的基础类。
下面是关于在项目实体中继承基础实体的一些建议。非持久化实体应该继承与持久化实体相同的基类。框架是根据实体所在注册文件:persistence.xml 或 metadata.xml 来确定实体是否是持久化实体。
- StandardEntity
-
继承自
StandardEntity
的实体带有一组标准功能:UUID 类型的主键、包含创建人和修改人及创建时间和修改时间、还支持乐观锁和软删除机制。
- 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 注解。