【Java】JPA 复合主键Support
Composite Primary Key定义
Composite Primary Key 译作复合主键,也有译作联合主键 ,总归是指在一张表中,由一个以上的列联合起来作为主键的一种主键定义方式。
create table student ( name varchar(10) null, age varchar(10) null, grade varchar(10) null ); alter table student add constraint user_pk primary key (name,grade);
对应的业务是创建了一个学生的表,本来想用name作为唯一标识,但是后面发现不同年级学生之间有重名,于是将年级(grade) 和name 联合起来标识一个学生,
JPA对Composite的支持
@IdClass
代码实现如图所示这时候name 和grade仍然是Student的属性,但是两者联合起来才能成为一个student的唯一标示了。
@EmbeddedId
EmbeddedId 是另一种实现复合组件的形式。
@IdClass Vs [email protected]_
两种实现对应的是两种不同的场景,要区分用那种,其实就考虑下某个属性独立存在有没有业务含义。
没有独立的业务含义时用EmbeddedId
比如EmbeddedId例子中对应的场景是文件的档案标识是文档类型编码TypeNumber (A、RC、IOS)等,而serialNumber则是文档编号,唯一确定一个文档就需要两者组合,例如IOS9001这类。9001以及IOS在文档业务中,大概率不会单独拿出来。(具体还是要看业务)
有独立业务含义时用IdClass
例如Student的例子中,name grade都有相对更加独立的业务含义,虽然有些场景会一起拿出来(如三年二班周杰伦),但是也有些场景会单独拎出来,那这个时候IdClass要比EmbeddedId要更加合适一些。
总之,如果我们常常访问主键的一部分则使用@IdClass 而经常使用组件的全部则使用@EmbeddedId
以上是 【Java】JPA 复合主键Support 的全部内容, 来源链接: utcz.com/a/96950.html