如何使用Spring Boot使复合主键成为复合主键的一部分-JPA

时间:2020-04-01 12:10:02

标签: spring-boot spring-data-jpa

我对数据库中对象的历史化存在问题。

  • 保存JpaRepository方法的预期行为是:插入在两个表 idt_h abo_h

    < / li>
  • 但是当前行为是 idt_h 表中的插入 abo_h 表中的 update

    @Data
    @Entity
    @Table(name = "ABO_H")
    @AllArgsConstructor
    @NoArgsConstructor
    public class AboOP {

    @Id
    @Column(name = "ABO_ID")
    private String id;

    @Column(name = "ABO_STATUT")
    private String statut;

    @Column(name = "ABO_DATE_STATUT")
    private Instant date;

    @Column(name = "ABO_CoDE")
    private String code;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumns({
            @JoinColumn(name = "IDC_ID", referencedColumnName = "IDC_ID"),
            @JoinColumn(name = "DATE_HISTO", referencedColumnName = "DATE_HISTO")
    })
    private IdtOP idtOP;

    }


    @Data
    @Entity
    @Table(name = "IDT_H")
    @AllArgsConstructor
    @NoArgsConstructor
    public class IdtOP {

    @AttributeOverrides({
            @AttributeOverride(name = "id",
                    column = @Column(name = "IDC_ID")),
            @AttributeOverride(name = "dateHisto",
                    column = @Column(name = "DATE_HISTO"))
    })
    @EmbeddedId
    private IdGenerique idtId = new IdGenerique();

    //Other fields

    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Embeddable
    public class IdGenerique implements Serializable {

    private String id;
    private Instant dateHisto;

    }

我认为表 abo_h 不能很好地调用将 id dateHisto 分组的类 IdGenerique > ??

预先感谢

1 个答案:

答案 0 :(得分:0)

使用save()方法时,entityManager将检查该实体是否为新实体。如果是,则将保存该实体,否则将被合并

如果使用接口Persistable实现实体类,则可以重写isNew()方法并使它返回True。在这种情况下,save()方法将持久存在,而不是合并到您的实体。

相关问题