将项目从Ibatis转换为JPA 2.1时,我遇到了一个问题,我必须为一组对象加载一个完整的对象图,而不是出于性能原因而没有按N + 1选择或使用笛卡尔积.
用户查询将产生List <Task>,我需要确保在返回任务时,它们已填充所有属性,包括父,子,依赖项和属性.首先让我解释一下所涉及的两个实体对象.
任务是层次结构的一部分.它可以有一个父任务,也可以有子.任务可以依赖于其他任务,由'dependencies'属性表示.任务可以有许多属性,由properties属性表示.
尽可能简化了示例对象,并删除了样板代码.
@Entity
public class Task {
@Id
private Long id;
@ManyToOne(fetch = LAZY)
private Task parent;
@ManyToOne(fetch = LAZY)
private Task root;
@OneToMany(mappedBy = "task")
private List<TaskProperty> properties;
@ManyToMany
@JoinTable(name = "task_dependency", inverseJoinColumns = { @JoinColumn(name = "depends_on")})
private List<Task> dependencies;
@OneToMany(mappedBy = "parent")
private List<Task> children;
}
@Entity
public class TaskPropertyValue {
@Id
private Long id;
@ManyToOne(fetch = LAZY)
private Task task; …Run Code Online (Sandbox Code Playgroud)