Как я могу сделать соединение с JPA весенней загрузки - PullRequest
0 голосов
/ 02 апреля 2020

Это основная сущность.

@Entity
@Table(name = "system_configuration")
public class SystemConfigurationDTO {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "systemConfigurationDTO")
    private List<SysConfigMetaDataDTO> sysConfigMetaDataDTO;
}

Это таблица, к которой я хочу присоединиться к SystemConfigurationDTO.

@Entity
@Table(name = "system_configuration_metadata")
public class SysConfigMetaDataDTO {
    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "system_configuration_id")
    private Long systemConfigurationId;
}

Проблема заключается в том, что для каждой записи, извлекаемой из system_configuration, этот идентификатор запрашивается в system_configuration_metadata. Как объединить и извлечь данные из обеих таблиц? Я не хочу делать JPQL. Я использую класс спецификации для построения предложения WHERE. Но я не уверен, как выбрать из обоих, используя соединение.

1 Ответ

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

Вам необходимо создать таблицу соединений, чтобы поставщик выполнял соединение за вас. Создайте таблицу соединений CONFIG_META с двумя полями, SYS_CONFIG_ID и SYS_CONFIG_META_ID. Затем аннотируйте частные поля ссылок следующим образом:

@Entity
@Table(name = "system_configuration")
public class SystemConfigurationDTO {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

   @OneToMany(fetch = FetchType.LAZY)
   @JoinTable(
    name="CONFIG_META",
    joinColumns={ @JoinColumn(name="SYS_CONFIG_ID", referencedColumnName="ID" },
    inverseJoinColumns={ @JoinColumn(name="SYS_CONFIG_META_ID", referencedColumnName="ID") }        
   )
   private List<SysConfigMetaDataDTO> sysConfigMetaDataDTO;
}


@Entity
@Table(name = "system_configuration_metadata")
public class SysConfigMetaDataDTO {
    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "system_configuration_id")
    private Long systemConfigurationId;

    @ManyToOne(fetch = FetchType.LAZY, mappedBy = "sysConfigMetaDataDTO")
    private SystemConfigurationDTO sysConfigDTO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...