С объектно-ориентированной точки зрения то, что представлено, выглядит как две ManyToOne
ассоциации между Item
и Operation
, одна из них является двунаправленной.Это может быть отображено так:
@Entity
public class Item {
@Id private Integer id;
private String name;
@ManyToOne
private Operation operationStart;
@ManyToOne
private Operation operationEnd;
//set/getters/hashcode/etc. omitted
}
@Entity
public class Operation {
@Id private Integer id;
private String name;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy="operationStart")
private List<Item> items = new ArrayList<Item>();
//set/getters/hashcode/etc. omitted
}
Это должно привести к таблице [ITEM]
с двумя FK, указывающими на [OPERATION]
.А заполнение коллекции items
приведет к ограничению SELECT
для одного из них (ID
операции запуска в приведенном выше примере).
Я не знаю, имеет ли смысл этот сценарийно это IMO единственный сценарий, с которым может справиться Hibernate.Если это не то, что вам нужно, то я думаю, что у вас должно быть две коллекции на стороне Operation
(которые вы, возможно, могли бы скрыть за дружественными методами).
Используете ли вы hbm.xml или аннотациине имеет значения.