Я получаю уникальное нарушение ограничения, хотя я добавляю уникальные объекты делегирования. Ниже мое отображение.
Сущность рабочего процесса
@Table(name = "wkf_inst")
@Id
@Column(name = "WKF_INST_ID", updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer wkfInstId;
@OneToMany(mappedBy = "wkfInstance", fetch = FetchType.EAGER, cascade =
CascadeType.ALL)
private Set<Delegation> Delegations;
Делегация субъекта
@Table(name = "wkf_assignee")
@Id
@Column(name = "WKF_INST_ASSIGNED_ID", updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer wkfDelegationId;
@Column(name = "ASSIGNED_TO")
private String delegatedTo;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "WKF_INST_ID")
private WkfInst wkfInstance;
У нас есть уникальное ограничение WKF_DELEGATION_UK для таблицы wkf_assignee (WKF_INST_ID, ASSIGNED_TO).
Я добавил 4 объекта разложения в виде набора для объекта Workflow и сохранил wkfInstRepository.saveAndFlush (wkfInst).
Сохранение создает уникальное исключение нарушения ограничения.
.d.i.w.controller.WorkflowController : Update Workflow error for the workflow with instance ID : [248134] [Co
mmon Workflow Engine] could not execute statement; SQL [n/a]; constraint [WKF_DELEGATION_UK]; nested exception is org.hibernate.exception.ConstraintViolationException: could
not execute statement org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:278)
Объекты делегирования извлекаются из списка, как показано ниже.
`workflowInstance.getAssignedToList()
.stream()
.map(o -> {
WkfDelegation delegation = new WkfDelegation();
delegation.setDelegatedTo(o.getAssignedTo());
delegation.setPriority(1);
delegation.setDelegatedRoleId(o.getAssignedToRole());
delegation.setIsActive("N");
delegation.setWkfInstance(wkfInst);
delegation.setDelegatedEmailId(o.getAssignedToEmailId());
);
return delegation;
})
.collect(Collectors.toSet());`
Это делегирование настроено на рабочий процесс, как показано ниже:
wkfInst.setWkfDelegations(getWorkFlowDelegations(workflowInstanceInfo, wkfInst));