使用相关表中的FK列值更新表

时间:2012-10-14 01:43:28

标签: java hibernate sql-update database-relations

使用了Hibernate实体。 DB中有AddressRoom个实体和适当的表格 Address可以有多个Room s。

这两个表都有address_IdcustomerEmailAddress
这些列在FK表中为Room,引用Address表。

DB中已有Address条记录 需要将几个房间添加到this地址。

如何使用AddressRoom之间的注释组织Hibernate关系,以便使用地址中的相应属性更新Room表:
address_IdcustomerEmailAddress

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

1 个答案:

答案 0 :(得分:1)

您尚未提及这两个表的主键。假设两个表都有自己的主键, 我认为您可以使用组件模型在AddressRoom个对象之间完成标准映射,如下所示:

  1. address_idcustomerEmailAddress映射为组件。请参阅此处的组件映射文档 - Hibernate Component Mapping

  2. 使用上面定义的组件在roomsAddress关系中添加One-To-Many,并将cascade设置为All

  3. 使用上面定义的组件将address Room添加为Many-To-One

  4. addRoom中定义一个Address方法,如下所示(概念性地):

      public void addRoom(Room room){
           if(this.rooms == null){
               this.rooms = new ArrayList<Room>();
           }
           room.setAddress(this);
           this.rooms.add(room);
      } 
    
  5. 现在您可以在Address级别工作。要保存room,请将room添加到address并保存地址。

  6. 希望这有帮助!