我有一个notificationTypes表,权限表。这些是通过桥表notification_types_permission的帮助链接的。当所有实体都是新的时,它工作正常。我的问题是,当我尝试插入具有现有权限的新notificationType时,该时间权限也会尝试插入新的权限。我的表和实体结构如下。
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;
}
@OneToMany( fetch = FetchType.EAGER)
private List<RLPermissions> permissions;
如果不需要删除,更新和插入权限列表操作,请避免使用该关系的级联属性。
首先检索新的权限:
Permission p = permissionDao.getPermissionByName("SuperAdmin");
然后像这样添加:
notificationType.notificationTypesPermission.getPermissions().add(p)
你已经设置了cascade = CascadeType.PERSIST,它将更新关系的许多方面。对NotificationTypes的任何更改都将更新相应的子实体
CascadeType.PERSIST:表示save()或persist()操作级联到相关实体。