Есть 2 модели: Кабель и Порт. Кабель о двух концах, каждый из которых можно воткнуть в порт. Таким образом:
@Table(name="cables")
class Cable {
@Id
private Long id;
@Column(name="dstport_id")
@OneToOne
private Port dstPort;
@Column(name="srcport_id")
@OneToOne
private Port srcPort;
}
@Table(name="ports")
class Port {
@Id
private Long id;
private Cable cable; // Тут должен быть аннотированный маппинг в Cable по полям cables.dstport_id ИЛИ cables.srcport_id, если такое соответствие найдется.
}
Собственно, отношение тут один-к-одному в обоих случаях. Вот только со стороны Порт отношение использует любое из двух полей Кабель, которое ссылается на этот Порт. При этом, это не отношение по составному внешнему ключу, это отношение по единичному внешнему полю (либо srcport_id, либо dstport_id). В сиквеле делается за 5 секунд. Есть решение для маппера Hibernate (желательно в терминах аннотаций)?
UPD: поправил для большей ясности.