【问题标题】:How to make composite Foreign Key part of composite Primary Key with Spring Boot - JPA如何使用 Spring Boot 使复合外键成为复合主键的一部分 - JPA
【发布时间】:2020-07-13 04:26:01
【问题描述】:

我对数据库中对象的历史记录有疑问。

  • save JpaRepository 方法的预期行为是:Insert 在两个表 idt_habo_h

  • 但当前的行为是 idt_h 表中的 Insertabo_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;

    }

我认为 iddateHisto 分组的类 IdGenerique 没有很好地为表 abo_h 调用> ??

提前致谢

【问题讨论】:

  • 如果你有多个 B 到一个 A,为什么不在 TableB 中设置一个外键呢?我没有得到你想用@JoinColumns 实现的目标?
  • 因为我在 A 类中使用了复合主键(id A, date_histo),而我在 B 类中需要这个键,因此有兴趣加入。

标签: spring-boot spring-data-jpa


【解决方案1】:

当你使用 save() 方法时,entityManager 会检查实体是否是新的。如果是,实体将被保存,如果不是,它将被合并

如果您使用接口 Persistable 实现您的实体类,您可以覆盖方法 isNew() 并使其返回 True。在这种情况下,save() 方法将保留,而不是合并您的实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 2015-12-14
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2016-07-20
    相关资源
    最近更新 更多