Я хочу создать вид дружеских отношений между моделями пользователей.Мне также нужны дополнительные столбцы для каждой дружбы.Я знаю, что мне нужно использовать присоединяющийся класс с составным первичным ключом.Вот мой класс пользователя
public class User implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@OneToMany(mappedBy="friendA")
private Set<Friendship> friends;
У меня также есть класс FriendshipId
@Embeddable
public class FriendshipId implements Serializable {
private long friendAId;
private long friendBId;
}
И, наконец, класс Friendship
@Entity
@IdClass(FriendshipId.class)
public class Friendship implements Serializable {
private Integer friendAId;
private Integer friendBId;
@Basic(optional = false)
@Column(name="date_added")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime date_added;
@ManyToOne
@PrimaryKeyJoinColumn(name="friendAId", referencedColumnName="friendAId")
private User friendA;
@ManyToOne
@PrimaryKeyJoinColumn(name="friendBId", referencedColumnName="friendBId")
private User friendB;
}
Это работает, но таблица базы данных, сгенерированная в моембаза данных состоит из каждого идентификатора дважды - я полагаю, один набор предназначен для первичного ключа, а второй - для внешних ключей.
Как я могу сделать этот PK уникальным - что дружба от A до B будет отвергнута, если есть B к A один?
Другой вопрос касается дизайна - это хороший способ достичь того, чего я хочу достичь?Я имею в виду использование составного ключа вместо просто собственного ПК для дружбы.