У меня есть таблица 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;