JPA:如何设置历史实体的密钥

时间:2017-07-28 03:01:16

标签: java spring jpa spring-boot spring-data

在Spring Boot / Spring Data的JPA中,我想建立一个实体类。

业务要求是对每年存在一次的文档的处理进行历史记录。

处理以批量方式执行:因此所有文档一起处理:对于每个处理顺序,数据库中的所有文档都有一个 processingTimestamp

稍后,我想只访问最近处理的文档,但保留以前处理过的文档以供参考。

我看到以下替代方案:

  1. 使用复合键

    @Id
    private String documentId;
    
    @Id
    private String yearOfDocumentCreation;
    
    @Id
    private java.sql.Timestamp processingTimestamp;
    
  2. 使用自动生成的密钥

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    private String documentId;
    
    private String yearOfDocumentCreation
    
    private java.sql.Timestamp processingTimestamp;
    
  3. 哪种替代方案是关于

    的更好/最佳做法
    1. 处理(例如,将文档列表存储为之前从数据库中读取并避免数据库中重复的文件)
    2. 性能
    3. 或者我是否会错过其他选择/方面?

1 个答案:

答案 0 :(得分:1)

如果您需要为此表创建外键,我建议使用单个Long主键。 为了避免使用dublicates,您可以对3个必需列进行唯一约束。