removeTask
메서드를 통해 TaskList
에서 Task
을 제거하려고하면 다음 엔티티가 있는데 예외가 발생합니다.정렬 된 최대 절전 모드 목록과의 고유 한 제약 조건 위반
@Entity
public class TaskList extends GenericModel {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@OrderColumn(name="position", nullable=false)
public List<Task> tasks = new ArrayList<>();
// ...
public void removeTask(Task task) {
tasks.remove(task);
}
}
@Entity
public class Task extends Model {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="task_id")
private List<Reservation> reservations = new ArrayList<>();
@ManyToOne
public TaskList taskList;
// ...
}
@Entity
public class Reservation extends GenericModel {
@Id
private String id = Token.generate(8);
@ManyToOne
private Task task;
// ...
}
는 예외입니다 : 내가 최대 절전 모드 3.6.1와 JPA 2를 사용하고
"CONSTRAINT_INDEX_F ON PUBLIC.TASKLIST_TASK(TASKS_ID)"
Unique index or primary key violation: "CONSTRAINT_INDEX_F ON PUBLIC.TASKLIST_TASK(TASKS_ID)"; SQL statement:
update TaskList_Task set tasks_id=? where TaskList_id=? and position=? [23001-149]
. 내 매핑에 문제가 있거나 최대 절전 모드 버그입니까?
UPDATE는
최대 절전 모드 문제가 될 것으로 보인다. delete
및 update
명령문이있는 것입니다.
@Entity
public class TaskList extends GenericModel {
// ....
public void removeTask(Task task) {
tasks.remove(task);
tasks = new ArrayList<>(tasks); // only for Hibernate
task.taskList = null;
}
}
Hibernate - clearing a collection with all-delete-orphan and then adding to it causes ConstraintViolationException가 올바른 방향으로 내 부품 : 다음 해킹 문제 (부분적으로)를 해결했다.
그러나는 내 대안으로는 작동하지 않습니다. 다음 예외로 이어집니다. "cascade ="all-delete-orphan "을 가진 콜렉션은 소유하는 엔티티 인스턴스에 의해 더 이상 참조되지 않습니다." 따라서 문제는 실제로 해결되지 않습니다.
위대한, 해킹이 나를 위해 일했습니다! 내 시나리오는 다음과 같습니다. 목록의 첫 번째 요소를 제거한 다음 목록의 끝에 요소를 추가했습니다. – rwitzel