Составная таблица первичных ключей не заполняется в связанном объекте - PullRequest
0 голосов
/ 30 января 2020

Моя база данных содержит таблицу с составным первичным ключом, так что один из ключей является внешним ключом, а другой предполагается использовать для получения объекта из внешней службы. Код выглядит примерно так:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Embeddable
@EqualsAndHashCode
public class PrimaryKey implements Serializable {
    @Column(name = "A_ID")
    private Long aId;

    @Column(name = "F_ID")
    private Long fId;
}


@Entity
@Table(name = "JOIN_ENTITY")
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class JoinEntity {
    @EmbeddedId
    private PrimaryKey pk;

    @MapsId("aId")
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "A_ID")
    private EntityA a;

    public getFId() { return pk.getFId(); }
}



@Entity
@Table(name = "ENTITY_A")
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class EntityA implements Serializable {
    ....

   @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true)
   List<JoinEntity> list = new ArrayList<>();
}

Когда я сохраняю JoinEntity и пытаюсь получить EntityA из базы данных, список не заполняется, но если я получаю некоторую JoinEntity из базы данных, связанная EntityA выздоровел правильно. Что мне делать, чтобы получить список JoinEntity для восстановления с помощью EntityA?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Решил проблему, добавив таблицу ENTITY_F с идентификатором и переключившись на простое отношение ManyToMany.

0 голосов
/ 30 января 2020

Вам необходимо использовать FetchType.EAGER для ассоциации @OneToMany в классе EntityA:

   @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
   List<JoinEntity> list = new ArrayList<>();

Таким образом, когда вы извлекаете EntityA из базы данных, его JoinEntity s будет автоматически получено.

...