代码之家  ›  专栏  ›  技术社区  ›  Araf

当我尝试插入通知类型对象时,子实体也尝试插入

  •  0
  • Araf  · 技术社区  · 7 年前

    我有一个notificationTypes表,权限表。这些通过桥接表notification\u types\u权限进行链接。 当所有实体都是新的时,它可以正常工作。 我的问题是,当我尝试使用现有权限插入新的notificationTypes时,time权限也会尝试插入一个新的notificationTypes。 我的表格和实体结构如下所示。

     CREATE TABLE `notification_types` (
      `Id` BIGINT(16) NOT NULL AUTO_INCREMENT,
      `TypeName` VARCHAR(80) NOT NULL,
      `InsertedDttm` DATETIME NULL,
      `InsertedBy` BIGINT(16) NULL,
      `UpdatedDttm` DATETIME NULL,
      `UpdatedBy` BIGINT(16) NULL,
      PRIMARY KEY (`Id`));
    
    CREATE TABLE `notification_types_permission` (
      `Id` BIGINT(16) NOT NULL AUTO_INCREMENT,
        `NotificationTypes_ID` BIGINT(16) NOT NULL,
        `permissions_ID` int(11) NOT NULL,
      PRIMARY KEY (`Id`), FOREIGN KEY (NotificationTypes_ID)
            REFERENCES `frontoffice`.notification_types(id), FOREIGN KEY (permission_Id)
            REFERENCES `frontoffice`.`permission`(id));
    public class NotificationTypes {
    
        @Id 
        private Long id;
        private String typeName;
        @Temporal(TemporalType.TIMESTAMP)
        private Date insertedDttm;
        private Long insertedBy;
        @Temporal(TemporalType.TIMESTAMP)
        private Date updatedDttm;
        private Long updatedBy;
    
        @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
        private List<RLPermissions> permissions;
    }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Araf    6 年前
     @OneToMany( fetch = FetchType.EAGER)
     private List<RLPermissions> permissions;
    

    如果不需要删除、更新和插入权限列表的操作,请避免从该关系中级联属性。

        2
  •  0
  •   egallardo    7 年前

    首先检索新权限:

    Permission p = permissionDao.getPermissionByName("SuperAdmin");
    

    然后添加如下内容:

    notificationType.notificationTypesPermission.getPermissions().add(p)
    
        3
  •  0
  •   mayuran siva    7 年前

    您已设置cascade=CascadeType。坚持,这将更新关系的许多方面。对NotificationTypes的任何更改都将更新相应的子实体

    级联型。PERSIST:表示save()或PERSIST()操作级联到相关实体。