JPA可以很方便的做多版本数据库的兼容性,但是每个数据库对于主键的支持都不太一样。比如Mysql里面一般使用自增类型的主键,而Oracle一般使用Sequence来做。
熟悉JPA的人肯定知道,JPA的id可以配置成不同的模式。大致由以下几种:AUTO:自动检测数据库主键类型,hibernate会自动选择一种。但是如果你自己尝试过的话,在MySQL里面默认不是用自增来做的,而是通过一张中间表来做。和我们想要的有点出入。
SEQUENCE:序列,对于Oracle会使用后面配置的序列名称,对于mysql不生效。
IDENTITY:自增主键,MySQL里面可以使用,Oracle里面该策略无效。
TABLE:通过生成一张中间表来实现序列生成,MySQL和Oracle都支持。
原本我们时在不同数据库版本的分支上实现两套Entity类,唯一的区别就是@GenerateValue不一样。
MySQL版本
@MappedSuperclass
@Data
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@CreatedDate
private Date createdTime;
@CreatedBy
private String createdBy;
@LastModifiedDate
private Date updatedTi