У меня есть два java-classes/db-tables: 'message' и 'thirdparty'
@Entity
public class Message {
@OneToOne(mappedBy = "message")
private ThirdParty source = null;
@OneToOne(mappedBy = "message")
private ThirdParty target = null;
....
}
@Entity
public class ThirdParty {
@OneToOne(targetEntity = Message.class)
@JoinColumn(name = "Message", referencedColumnName = "mess_id", nullable = false)
private Message message = null;
@Column(name = "isSource", nullable = false)
private Boolean isSource = null;
}
Сообщение имеет две ссылки на ThirdParty, которые могут отличаться от isSource (если они являются исходными или целевыми).
Это не может быть разрешено jpa, так как оно спроектировано/аннотировано. Но есть ли способ сделать это, добавив некоторую аннотацию или какой-то специальный sql-оператор?
Это концептуально неправильно. Ты не сможешь это сделать. Отображение OneToOne происходит, когда два объекта отображаются следующим образом:
Entity1: имеет первичный ключ (PK1) и другие вместе с внешним ключом (FK)
Entity2: имеет первичный ключ (PK2).
Теперь FK отображается на PK2 таким образом, что для каждого вхождения PK должно быть одно и только одно совпадение FK.