Объединение полей составного ключа 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;
}
→ Ссылка