Здравствуйте. Есть две сущности (политики паролей и группы):
@Entity
@Table(name = "sys_password_policy", schema = "oauth")
public class SysPasswordPolicyEntity implements Serializable {
private Long policyId;
private String policyName;
private Set<SysGroupEntity> sysGroupsByPolicyId;
// ...
@OneToMany(mappedBy = "sysPasswordPolicyByPasswordPolicyId", fetch = FetchType.LAZY)
public Set<SysGroupEntity> getSysGroupsByPolicyId() {
return sysGroupsByPolicyId;
}
public void setSysGroupsByPolicyId(Set<SysGroupEntity> sysGroupsByPolicyId) {
this.sysGroupsByPolicyId = sysGroupsByPolicyId;
}
}
@Entity
@Table(name = "sys_group", schema = "oauth")
public class SysGroupEntity implements Serializable {
private Long groupId;
private String groupName;
private SysPasswordPolicyEntity sysPasswordPolicyByPasswordPolicyId;
//...
@ManyToOne
@JoinColumn(name = "password_policy_id", referencedColumnName = "policy_id")
public SysPasswordPolicyEntity getSysPasswordPolicyByPasswordPolicyId() {
return sysPasswordPolicyByPasswordPolicyId;
}
public void setSysPasswordPolicyByPasswordPolicyId(SysPasswordPolicyEntity sysPasswordPolicyByPasswordPolicyId) {
this.sysPasswordPolicyByPasswordPolicyId = sysPasswordPolicyByPasswordPolicyId;
}
}
Нужно, чтобы:
- При создании политики можно было ей назначить какие-то группы (группы при этом не должны создаваться, и у них не должны обновляться никакие поля, кроме sysPasswordPolicyByPasswordPolicyId)
- При обновлении политики можно было удалить из списка группа, а также добавить её из списка (при этом не нужно, чтобы группы удалялись из базы, создавались в базе, и не нужно, чтобы у них в базе обновлялись все поля, кроме sysPasswordPolicyByPasswordPolicyId; нужно, чтобы при удалении из списка значение поля sysPasswordPolicyByPasswordPolicyId становилось null, при добавлении - этому полю присваивалась ссылка на текущую группу)
Как обычно решаются такие задачи? (вроде ситуация стандартная, и часто встречается)
P.S. Пытался искать в интернете, но по моей ситуации сложно что-то найти, а по связанным общим темам пока ничего не нашёл.