JPA две таблицы, которые разделяют ключ, который является внешним ключом и частью составного ключа - PullRequest
1 голос
/ 01 апреля 2020

У меня есть две таблицы

    CREATE TABLE public.account (
        id uuid NOT NULL,
        "name" varchar(255) NULL,
        CONSTRAINT account_pkey PRIMARY KEY (id)
    );

    CREATE TABLE public.account_ext (
        id uuid NOT NULL,
        external_account_type varchar(255) NOT NULL,
        external_account_id varchar(255) NOT NULL,
        account_entity_id uuid NULL,
        CONSTRAINT account_ext_pkey PRIMARY KEY (id, external_account_type, external_account_id)
        FOREIGN KEY (id) REFERENCES account (id)
    );

Я хотел бы сопоставить их с использованием требований JPA

  1. при создании учетной записи с account_ext все учетные записи ext получат учетную запись i = автоматически увеличенный идентификатор 2. объединение 3 полей в account_ext будет уникальным ограничением

это то, что я пытался сделать без успеха

@Entity
@Data
@Table(name = "account")
@EqualsAndHashCode
public class AccountEntity extends BaseEntity{

    @Column
    private String name;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "accountEntity")
    private Set<ExternalAccountEntity> externalAccounts = new HashSet<>();
} 

    @Entity
    @Data
    @Accessors(chain = true)
    @Table(name = "account_ext")
    public class ExternalAccountEntity {

      @EmbeddedId private ExternalAccountEntityId externalAccountEntityId;

      @ToString.Exclude
      @EqualsAndHashCode.Exclude
      @ManyToOne(fetch = FetchType.LAZY)
      private AccountEntity accountEntity;
    }

        @Data
        @Builder
        @AllArgsConstructor
        @NoArgsConstructor
        @Embeddable
    public class ExternalAccountEntityId implements Serializable {

      private static final long serialVersionUID = -8173857210615808268L;

      @Column private UUID id;
      @Column private String externalAccountId;
      @Enumerated(EnumType.STRING)
      private ExternalAccountType externalAccountType;
    }

может кто-нибудь мне помочь с этим

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