Spring Data JPA, составной ключ как @EmbeddedId не работает. Поделиться кодом ниже так просто, как это возможно. Использование lombok, чтобы получить / установить / минусы не показаны. Ниже приведен пример проблемы, которую я пытался достичь.
Сущность пользователей:
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private Long id;
private String username;
private String password;
private String email;
@OneToMany(mappedBy = "primaryKey.user", cascade = CascadeType.ALL)
private Set<UserGroup> userGroups = new HashSet<UserGroup>();
}
Сущность группы:
@Data
@Entity
@Table(name = "groups")
public class Group {
@Id
@GeneratedValue
@Column(name = "group_id")
private Long id;
private String name;
@OneToMany(mappedBy = "primaryKey.group", cascade = CascadeType.ALL)
private Set<UserGroup> userGroups = new HashSet<UserGroup>();
}
Ключ пользователя и группы:
@Data
@Embeddable
public class UserGroupId implements Serializable {
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
@ManyToOne
private User user;
@JoinColumn(name = "group_id", referencedColumnName = "group_id")
@ManyToOne
private Group group;
}
Пользователь и сущность сопоставления группы:
@Data
@Entity
@Table(name = "users_groups")
@AssociationOverrides({
@AssociationOverride(name = "primaryKey.user", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id")),
@AssociationOverride(name = "primaryKey.group", joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "group_id")) })
public class UserGroup {
@EmbeddedId
private UserGroupId primaryKey = new UserGroupId();
@Column(name = "activated")
private Boolean activated;
}
Дает ошибку "com.sun.jdi.InvocationException: возникла исключительная ситуация в целевой виртуальной машине, вызвавший метод" при вызове [user.userGroups].