У меня есть 2 SQL таблиц, «узел» и «край».
Таблица «узел» имеет составной первичный ключ, который состоит из двух столбцов: «id» и «type».
Таблица "edge" содержит следующие столбцы:
- node_1_id: идентификатор первого узла края
- node_1_type: тип первого узла края
- node_2_id: идентификатор второго узла края
- node_2_type: тип второго узла края
Также есть два ограничения внешнего ключа, которые связывают ("node_1_id", "node_1_type") и ("node_2_id", "node_2_type") с "id" и "type" таблицы "node".
Я создал следующий объект jpa:
@Entity
@Table(name = "edge")
public class Edge {
@Id
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "description", nullable = true, length = 100)
private String description;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "node_1_id", referencedColumnName = "id"),
@JoinColumn(name = "node_1_type", referencedColumnName = "type")
})
private Node node1;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "node_2_id", referencedColumnName = "id"),
@JoinColumn(name = "node_2_type", referencedColumnName = "type")
})
private Node node2;
}
В объекте «Узел» я хотел бы создать отношение «OneToMany», называемое «ребра», которое выбирает все ребра, связанные с узлом (не имеет значения, это первый или второй узел).
Это корреспондент SQL запрос:
select *
from node n join edge e
on (n.id = e.node_1_id and n.type = e.node_1_type) or (n.id = e.node_2_id and n.type = e.node_2_type)
where n.id = 1 and n.type = 'type';
Как я могу создать такое отношение ион?