java - 使用休眠的 EntityNotFoundException 句柄
问题描述
我正在开发 Spring Boot 应用程序,其中我正在处理三个数据库表。
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
@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 和任务表中。当我们在内部创建任务对象时,休眠会自动获取工作者对象,并且对于 ObjectDetail 对象创建工作者和任务对象也是如此。(按 objectdetail 的 task_id 映射到任务对象,其余部分相同)
现在由于一些问题,我们需要从工作表中删除一个工作条目。假设直接我们没有要求运行哪个任务的工人。但是当我们使用休眠列出任务项时,我们得到
javax.persistence.EntityNotFoundException: Unable to find <packagename>.Worker with id 5bb2c8f7-c938-4343-89e2-611b39d99f90
我知道它因为那个 Worker 而抛出的东西在数据库中不存在。我用谷歌搜索并找到了一些解决方案,@NotFound(action=NotFoundAction.EXCEPTION)
但它似乎忽略了所有未找到的此类记录。
我的要求是只忽略工作对象而不是完整记录。我想列出所有具有工作对象 null 或具有值的任务。
如果有人对此有建议,我将不胜感激。
解决方案
推荐阅读
- node.js - 在控制台应用程序的猫鼬上保存文档继续挂起执行
- git - 修改 Git 提交的作者并保留原始提交日期
- terraform - 变量中的地图(地图(字符串))问题
- html - 填充多行 flex 布局中剩余的水平空间(“flex-grow:1”不起作用)
- swift - 如何将类转换为可解码的 Json,如 Swift 中的@SerializedName?
- powershell - Powershell - 使用密钥/密码进行 base64 编码
- node.js - Nest 无法解析 ~repository 的依赖关系
- web-scraping - 如何使用 WGET 下载静态网站,包括单独文件夹中的 CSS、JS、图像
- sticky - Can't wrap my head around Locomotive Scroll sticky 属性
- python - 将记录插入 PostgreSQL 表并过期旧记录