Я работаю над Spring Boot Application, в котором я работаю над тремя таблицами базы данных.
Worker, Task и ObjectDetail
Рабочая сущность
@Entity
@Table(name = "WORKER")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@EqualsAndHashCode(of = "id", callSuper = false)
@ToString()
public class Worker{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(unique = true, length = 36)
private String id;
private String name;
}
Следующая задача класса
@Entity
@Table(name = "TASK")
@Data
@EqualsAndHashCode(of = "id", callSuper = false)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Task{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(unique = true, length = 36)
private String id;
@ManyToOne
@JoinColumn(name = "School_Id")
private School assignWorker;
}
ObjectDetail Entity
@Entity
@Table(name = "OBJECT_DETAIL")
@Data
@EqualsAndHashCode(of = "id", callSuper = false)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ObjectDetail{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(unique = true, length = 36)
private String id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "taskId")
@NotNull
@NotFound(action=NotFoundAction.IGNORE)
private Task task;
@ManyToOne
@JoinColumn(name = "worker_id")
private Worker worker;
}
Проектная организация
@Entity
@Table(name = "PROJECT")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode(of = "id", callSuper = false)
public class Project {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(unique = true, length = 36)
private String id;
@NotNull(message = "You must specify a name.")
@Column(unique = true)
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "project")
@LazyCollection(LazyCollectionOption.TRUE)
@JsonIgnore
private List<Task> tasks = new ArrayList<>();
}
Сценарий
Как я уже говорил, у меня есть три таблицы дБ, а также соответствующие им классы сущностей. И каждая задача, выполняемая для проекта на конкретном работнике и его обработанные данные, сохраняется в таблице objectDetail.
как упомянуто в вышеупомянутой сущности, что мы храним рабочий в objectDetail и таблице задач. и когда мы создаем объект задачи, внутренне hibernate автоматически получает объект работника и то же самое для объекта ObjectDetail создает объект работника и задачу. (сопоставить по task_id объектаdetail для объекта задачи и то же самое для остальных)
Теперь из-за какой-то проблемы нам нужно удалить рабочие записи из рабочей таблицы. Предположим, что непосредственно у нас нет потребности в работнике, для которого выполнялось задание. но когда мы делаем список элементов задачи, используя hibernate, мы получаем
javax.persistence.EntityNotFoundException: Unable to find <packagename>.Worker with id 5bb2c8f7-c938-4343-89e2-611b39d99f90
Я понимаю, что его бросок из-за этого работника не существует в БД.
Я заглянул в него и нашел какое-то решение из этого @NotFound(action=NotFoundAction.EXCEPTION)
Но похоже, что игнорируются все такие записи, которые не найдены.
Мое требование - игнорировать рабочий объект только вместо полной записи.
Я хочу перечислить все задачи с нулевым рабочим объектом или значением.
Буду признателен, если у кого-нибудь есть предложения по этому поводу.