我有一个可以处理不同工作的应用程序。作业由界面描述,如下所示:
public interface Job {
void start();
String getName();
void setName(String name);
// Getters and setters for other properties
}
作业持久存储在数据库中。现在要求必须按顺序执行某些工作组。 当我在程序中创建作业时,没有问题,因为作业被放入队列中。 但是当我重新创建持久作业时,我没有关于原始订单的信息。
我考虑添加另一个名为preceder
的成员来存储前一个作业。这会给我一些链接列表,我可以像这样改变表格:
+----+-------------+-------+-----------+
| id | preceder_id | name | others... |
+----+-------------+-------+-----------+
| 1 | null | Job 1 | ... |
| 2 | 1 | Job 2 | ... |
| 3 | 2 | Job 3 | ... |
+----+-------------+-------+-----------+
但是,如何使用Spring Data JPA和JPARepository
来获取此类组的有序列表?
答案 0 :(得分:0)
您可以使用自联接来映射:
@Table(name = "JOB")
public class Job implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO) //or some other strategy
private Long id;
@OneToOne()
@JoinColumn(name = "preceder_id")
private Job previousJob;
}
假设您可以加载链中的最后一个作业,那么您应该能够进行某种递归调用链。
Job job = loadJobFromDB();
runJob(job);
public void runJob(Job Job){
if(job.getPreviousJob() != null){
runJob(job.getPreviousJob());
}
job.start();
}
其他选项是更改架构,为组内的每个作业添加作业组和作业序列。