使用了休眠实体。数据库中有Address
和Room
实体和专有表。
Address
可以有多个Room
。
两个表都有address_Id
和customerEmailAddress
这些列FK
Room
表中,引用Address
表。
数据库中已经有Address
记录。
需要将多个聊天室添加到this
地址。
如何使用Address
和Room
之间的注释组织休眠关系,以便使用地址中的适当属性更新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||客户电子邮件地址
1 || 3 ||
mail3@a.com2 || 3 ||mail3@a.com
你还没有提到两个表的主键。假设两个表都有自己的主键,我认为您可以使用组件模型在Address
和Room
对象之间完成标准映射,如下所示:
-
将
address_id
和customerEmailAddress
映射为一个组件。请参阅此处的组件映射文档 - 休眠组件映射。 -
使用上面定义的组件在
Address
和One-To-Many
关系中添加rooms
,并将cascade
设置为All
。 -
使用上面定义的组件
Many-To-One
Room
中添加address
。 -
在
Address
中定义一个addRoom
方法,如下所示(概念上):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
并保存地址。
希望这有帮助!