У меня есть такие таблицы: Таблица1: Пользователи
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(45) | NO | | NULL | |
| lastname | varchar(45) | NO | | NULL | |
| birth_date | date | NO | | NULL | |
| is_deleted | tinyint | NO | | 0 | |
+------------+-------------+------+-----+---------+----------------+
Объект 1:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, updatable = false, nullable = false)
private int id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "lastname", nullable = false)
private String lastName;
@Column(name = "birth_date")
private Date birthDate;
@Column(name = "is_deleted")
private boolean isDeleted;
Таблица 2: Дружба
+----------------+-----------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-----------+------+-----+-------------------+-------------------+
| first_user_id | int | NO | | NULL | |
| second_user_id | int | NO | | NULL | |
| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+----------------+-----------+------+-----+-------------------+-------------------+
Объект 2:
@Entity
@Table(name = "friendships")
public class Friendship {
@Id
@Column(name = "first_user_id")
private int firstUserId;
@Id
@Column(name = "second_user_id")
private int secondUserId;
Я должен получить всех друзей пользователя, используя Hibernate без собственных SQL запросов. Идентификатор пользователя может появиться в обоих столбцах 2-й таблицы. С JDB C и SQL я использовал этот запрос:
SELECT u.id, u.name, u.lastname FROM users u
INNER JOIN friendships f
ON u.id = f.first_user_id OR u.id = f.second_user_id
WHERE f.second_user_id = :userId AND u.id = f.first_user_id
UNION
SELECT u.id, u.name, u.lastname FROM users u
INNER JOIN friendships f
ON u.id = f.first_user_id OR u.id = f.second_user_id
WHERE f.first_user_id = :userId AND u.id = f.second_user_id;
Возможно ли это сделать с помощью Hibernate?