Spring JPA Уникальное нарушение ограничения при сохранении набора - PullRequest
0 голосов
/ 05 ноября 2018

Я получаю уникальное нарушение ограничения, хотя я добавляю уникальные объекты делегирования. Ниже мое отображение.

Сущность рабочего процесса

@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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...