Как сделать составной внешний ключ частью составного первичного ключа с помощью Spring Boot - JPA - PullRequest
0 голосов
/ 01 апреля 2020

У меня проблема с историзацией объектов в базе данных.

  • ожидаемое поведение метода сохранения JpaRepository: Вставка в две таблицы idt_h и abo_h

  • Но текущее поведение Вставить в таблицу idt_h и обновление в таблице abo_h .

    @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;

    }

Я думаю, что класс IdGenerique , который группирует id и dateHisto плохо вызывается для таблицы abo_h ??

заранее спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Когда вы используете метод save (), entityManager проверяет, является ли объект новым или нет. Если да, сущность будет сохранена, если нет, то она будет объединена

. Если вы реализуете свой класс сущности с помощью интерфейса Persistable, вы можете переопределить метод isNew () и сделать так, чтобы он возвращал True. В этом случае метод save () сохранится, а не объединит вашу сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...