使用了Hibernate实体。
DB中有Address
和Room
个实体和适当的表格
Address
可以有多个Room
s。
这两个表都有address_Id
和customerEmailAddress
这些列在FK
表中为Room
,引用Address
表。
DB中已有Address
条记录
需要将几个房间添加到this
地址。
如何使用Address
和Room
之间的注释组织Hibernate关系,以便使用地址中的相应属性更新Room
表:
address_Id
和customerEmailAddress
Java部分看起来像:
Room room = new Room();
Address addr = someService.getAddressFromSession();
room.add(addr);
entityManager.persist(room);
Room room2 = new Room();
room2.add(addr);
entityManager.persist(room2);
DB结果(房间表)应如下:
的 ID ||的 addressId || customerEmailAddress
1 || 3 || mail3@a.com
2 || 3 || mail3@a.com
答案 0 :(得分:1)
您尚未提及这两个表的主键。假设两个表都有自己的主键,
我认为您可以使用组件模型在Address
和Room
个对象之间完成标准映射,如下所示:
将address_id
和customerEmailAddress
映射为组件。请参阅此处的组件映射文档 - Hibernate Component Mapping。
使用上面定义的组件在rooms
和Address
关系中添加One-To-Many
,并将cascade
设置为All
。
使用上面定义的组件将address
Room
添加为Many-To-One
。
在addRoom
中定义一个Address
方法,如下所示(概念性地):
public void addRoom(Room room){
if(this.rooms == null){
this.rooms = new ArrayList<Room>();
}
room.setAddress(this);
this.rooms.add(room);
}
现在您可以在Address
级别工作。要保存room
,请将room
添加到address
并保存地址。
希望这有帮助!