Ano*_*nym 5 java orm hibernate
我在映射以下内容时遇到了一些麻烦:
public class Operation {
private Integer id;
private String name;
private List<Item> items = new ArrayList<Item>();
//set/getters/hashcode/etc. omitted
public void addItem(Item i,Operation end) {
i.setOperationStart(this);
i.setOperationEnd(end};
items.add(i);
end.getItems().add(i);
}
public class Item {
private Integer id;
private String name;
private Operation operationStart;
private Operation operationEnd;
//set/getters/hashcode/etc. omitted
}
Run Code Online (Sandbox Code Playgroud)
所以基本上一个操作有一堆项目,一个项目属于2个操作。此外,如果其中一项操作不存在,则项目存在也没有意义,即如果我删除其中一项操作,我还想从它存储的其他任何地方删除该项目。
有没有人有关于我如何映射上述类的指针,或者可以指出一些示例,显示如何映射具有 2 个父级的子对象?
从面向对象的角度来看,所表示的内容看起来像和之间的两个 ManyToOne关联,其中一个是双向的。这可以这样映射:ItemOperation
@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
}
Run Code Online (Sandbox Code Playgroud)
这应该会导致[ITEM]表中有两个 FK 指向[OPERATION]。填充items集合将导致SELECT仅限于其中之一(ID上例中的启动操作)。
我不知道这种情况是否有意义,但在我看来,这是 Hibernate 可以处理的唯一情况。如果这不是您想要的,那么我认为您应该在侧面有两个集合Operation(您可以隐藏在友好的方法后面)。
无论您使用 hbm.xml 还是注释都没有任何区别。
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |