В моем дизайне есть зеркальная связь один ко многим, и они не пересекаются.
Т.е. есть Entity1, Entity2 , у каждой есть свой id и другие свойства. И есть операционная таблица, в которой хранятся entity1_id, entity2_id и еще некоторые свойства посчитанные бизнес логикой.
В данном случае entity1_id может соответствовать многим entity2_id , и наоборот, но например если entity1_id уже в связи один ко многим, то он не попадет в многие к одному, с точки зрения бизнес логики совпадение entity1->entity2 один к одному.
Как это выразить с помощью Hibernate? Все мои попытки закончились на том, что хибернейт либо создавал кросс FK на таблицы Entity1 и Entity2, либо создавал entity1_id в таблице Entity2 и наоборот.
Важный момент в том, что связь между этими Entity достаточно динамична, т.е. связь создается не во время создания этих сущностей, а в результате бизнес-логики. Кроме того , эта связь в жизненном цикле сущностей может пропадать в случае некоторых бизнес правил.
@Entity
public class BuyOrder {
@Id
private String id;
//... other fields
}
@Entity
public class SellOrder {
@Id
private String id;
//... other fields
}
@Entity
public class MatchedOrders {
@Id
private String id;
private String buyOrderId;
private String sellOrderId;
//... other fields
}
Buy и SellOrder не должны знать про связку друг друга через MatchedOrders.
Записи в MatchedOrders появляются гораздо позже после создания Sell и BuyOrder.
В итоге хотелось бы , чтобы на уровне схемы базы таблица matched_orders осталась как выше описан класс MatchedOrders, а видеть MatchedOrders.class так:
@Entity
public class MatchedOrders {
@Id
private String id;
private Set buyOrders;
private Set sellOrders;
//... other fields
}