JPA复合主键的使用
背景
人员信息和组信息的关联表中使用的USER_ID_和GROUP_ID_的联合主键,在维护组人员信息的时候,发现JPA打印的SQL只根据USER_ID_作为条件来更新数据,当B组存在zhangsan时,A组插入zhangsan的时候,不会重新插入一条数据,而是将B组改为了A组,导致B组下没有zhangsan这个人员。
解决
JPA映射实体
@Entity
@Table(name = "xxx_id_membership")
@Data
@DynamicInsert
@DynamicUpdate
// IdClass()指定来定义复合主键的类
@IdClass(XxxIdMembershipPkEntity.class)
// 类必须实现序列化
public class XxxIdMembershipEntity implements Serializable {
/**
* 用户ID
*/
@Id // 指定为ID主键
@Column(name = "USER_ID_")
private String userId;
/**
* 组ID
*/
@Id // 指定为ID主键
@Column(name = "GROUP_ID_")
private String groupId;
}
复合主键定义类
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
// 类需要实现序列化
public class XxxIdMembershipPkEntity implements Serializable {
/**
* 用户ID
*/
private String userId;
/**
* 组ID
*/
private String groupId;
}
数据层定义
//ID 处为复合主键定义类
public interface XxxIdMembershipEntityRepository extends JpaRepository<XxxIdMembershipEntity, XxxIdMembershipPkEntity> {}
本文来自博客园,作者:旭好杂货铺,转载请注明原文链接:https://www.cnblogs.com/zhaoxu46/p/16643049.html