Hibernate один ко многим отображает два внешних ключа в один столбец? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть таблица user и другая таблица с двумя столбцами, указывающими на идентификатор пользователя. Как я могу сопоставить отношение один ко многим, не искать внешний ключ только в одном из этих столбцов, но присоединиться, если есть один из этих 2 столбцовуказать пользователю.Я использую Spring с hibernate и JPA.

Пользователь:

+------------+  
|    id      | 
+------------+
|     1      |
|     2      |
+------------+

Игры: (где user1 и user2 означают игрока 1 и 2 с внешним ключом для userId)

+------------+---------+--------+
|    user1   |  user2  |  game  | 
+------------+---------+---------
|      1     |    4    |   1    |
|      6     |    1    |   2    |
+------------+---------+--------+

Мне удается получить игры пользователя 1, только если он находится в первом столбце, но он не получает игры, в которых пользователь 1 находится во втором столбце игровой таблицы.Есть ли способ сделать это с помощью спящего аннотации?

@Entity
@Table(name = "users")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinTable(name = "games",joinColumns ={@JoinColumn(name ="first_user", referencedColumnName ="id" )},inverseJoinColumns = @JoinColumn(name ="second_user", referencedColumnName ="id" ))
    private List<Game> games;


@Entity
@Table(name = "games")
public class Game {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "first_user", insertable = false, updatable = false)
    private User firstUser;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "second_user", insertable = false, updatable = false)
    private User secondUser;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...