簡體   English   中英

如何使用Spring Data JPA保存和加載有序數據?

[英]How to save and load ordered data using Spring Data 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獲取此類組的有序列表?

您可以使用自聯接對此進行映射:

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

其他選項是更改架構以為該組中的每個作業添加一個作業組和一個作業序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM