Как отобразить рефлексивный корабль отношений ManyToMany с дополнительным столбцом в JPA - PullRequest
0 голосов
/ 25 марта 2011

Я пытаюсь отобразить корабли отношений USER / FRIEND, используя JPA поверх Hibernate. У корабля связи есть дополнительный столбец friendShipStatus, который описывает, принял ли запрошенный друг не запрос дружбы. Это модель базы данных, которую я хочу получить с помощью сопоставления.

User
=====
Id
Name
etc...

UserFriend
===========
UserId ( foreign key --> user_id)
FriendId ( foreign key --> user_id)
userFriendStatus
FriendShipRequestDate

Мне также нужен пример кода, использующего эту связь.

1 Ответ

1 голос
/ 25 марта 2011

Поскольку у вас есть дополнительные столбцы в соединительной таблице, ее нельзя отобразить с помощью ManyToMany. Он должен быть отображен как два отношения OneToMany:

У одного пользователя (источника) много друзей

Одна Дружба для одного исходного пользователя (пользователь, который просил дружбы)

Одна дружба для одного целевого пользователя (пользователя, который должен принять дружбу)

Таким образом, у вас должны быть следующие сущности:

@Entity
public class User {
    // ...
    /**
     * the list of friendships asked by this user
     */
    @OneToMany(mappedBy = "sourceUser")
    private List<Friensdship> frienships = new ArrayList<Friendship>();

}

@Entity
public class Friendship {
    // ...
    /**
     * the user who asked the friendship
     */
    @ManyToOne()
    @JoinColumn(name = "user_id")
    private User sourceUser;

    /**
     * the user to whom the friendship was asked
     */
    @ManyToOne()
    @JoinColumn(name = "friend_id")
    private User targetUser;
}

При необходимости вы также можете указать обратное отношение у пользователя:

/**
 * the list of friendships asked to this user
 */
@OneToMany(mappedBy = "targetUser")
private List<Friendship> requestedFriendships = new ArrayList<Friendship>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...