如何使用Spring Data JPA保存和加载有序数据?

时间:2014-10-16 06:37:21

标签: java spring jpa

我有一个可以处理不同工作的应用程序。作业由界面描述,如下所示:

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来获取此类组的有序列表?

1 个答案:

答案 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();
}

其他选项是更改架构,为组内的每个作业添加作业组和作业序列。