@MapsId
上面的代码和之前不同的地方在于,对于 Tuition
实体类,去掉了 @GeneratedValue
注解,加上了 @MapsId
注解。
@MapsId
的作用在于,将 student_id
的值映射到了 id
上。也就是说,JPA 自动建表时,tuition
表中就只有 id
没有 student_id
了,并且也没有指定 id
自动生成策略,因为 id
现在应该使用 student_id
的值。
@MapsId
副作用:使用 @MapsId
注解之后,任何嵌套或递归的 Projection 都将被设置为 null
。
除非你确定该实体只与某个实体有依赖关系,否则不要使用 @MapsId
。
我还是推荐不使用 @MapsId
,免得给自己带来麻烦。
最后更新于