使用休眠的EntityNotFoundException句柄

时间:2019-03-20 13:05:29

标签: java spring hibernate hql

我正在处理Spring Boot Application,其中正在处理三个数据库表。

工作者,任务和ObjectDetail

工人实体

ld

下一课任务

ocamlopt

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表中。 如上述实体所述,我们将工作程序存储在objectDetail和task表中。当我们在内部创建任务对象时,hibernate会自动获取worker的对象,而ObjectDetail对象创建冬眠对象和task的对象相同。 (按objectdetail的task_id映射到任务对象,其余相同)

现在由于某些问题,我们需要从worker表中删除一个worker条目。假定直接我们不要求在其上运行任务的工作人员。但是当我们使用休眠方式列出任务项时,我们会得到

@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;

 }

我知道,由于该Worker而导致的抛出在数据库中不存在。 我用Google搜索,发现其中一种解决方案是@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<>(); } 但似乎忽略了所有未找到的此类记录。

我的要求是仅忽略工作对象而不是完整的记录。 我想列出所有具有工作者对象null或具有值的任务。

如果有人提出建议,我将不胜感激。

0 个答案:

没有答案