Дескриптор EntityNotFoundException, использующий спящий режим - PullRequest
1 голос
/ 20 марта 2019

Я работаю над 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) Но похоже, что игнорируются все такие записи, которые не найдены.

Мое требование - игнорировать рабочий объект только вместо полной записи. Я хочу перечислить все задачи с нулевым рабочим объектом или значением.

Буду признателен, если у кого-нибудь есть предложения по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...