Объединение полей составного ключа hibernate
У меня есть сущность, которая имеет составной ключ из двух одинаковых сущностей с составным ключом. Оставив всё как есть, я получу таблицу, в которой первичным ключом будет группа из четырёх столбцов (first_profile_user_id, first_profile_chat_id, second_profile_user_id, second_profile_chat_id)
Но если chatId
у первого и у второго профиля всегда будет одинаковый, могу ли я каким либо образом объединить столбцы first_profile_chat_id
и second_profile_chat_id
в один? Как это сделать?
@Entity
class Relation {
@EmbeddedId
private RelationFK fk;
@Embeddable
public static class RelationFK implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
private Profile firstProfile;
@ManyToOne(fetch = FetchType.LAZY)
private Profile secondProdile;
}
}
@Entity
class Profile {
@EmbeddedId
private ProfilePK pk;
@Embeddable
public static class ProfilePK implements Serializable {
private Long chatId;
private Long userId;
}
}
Ответы (1 шт):
Автор решения: talex
→ Ссылка
Вопервых, мусье знает толк в тонких извращениях :)
Я бы сделал составной ключь из трех полей и два ридонли поля чтобы получать сущности.
@Entity
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Relation {
@EmbeddedId
private RelationPK pk;
@Embeddable
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public static class RelationPK {
private Long chatId;
private Long user1Id;
private Long user2Id;
}
@ManyToOne
@JoinColumn(name = "chatId", referencedColumnName = "chatId", insertable = false, updatable = false)
@JoinColumn(name = "user1Id", referencedColumnName = "userId", insertable = false, updatable = false)
@Getter
private Profile firstProfile;
}