Сопоставление Spring Data Jpa One To One с предложением where - PullRequest
0 голосов
/ 30 марта 2020

У меня есть две таблицы, и мне нужно сопоставление OneToOne с предложением where.

select * from person_details inner join address_details
on address_details.pid=person_details.pid AND person_details.exist_flag = 'Y' AND address_details.address_exist_flag = 'Y'

Таблица 1

public class PersonDetails {
    @Id
    private String pid;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "exist_flag")
    private String existFlag;

    @OneToOne(mappedBy = "personDetails", cascade = CascadeType.ALL)
    @Where(clause = "addressExistFlag = 'Y'")
    private AddressDetails addressDetails;
}

Таблица 2

@Data
@NoArgsConstructor
@Entity
@Table(name = "address_details")
public class AddressDetails {
    @Id
    private String pid;

    private String street;

    @Column(name = "address_exist_flag")
    private String addressExistFlag;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "pid", insertable = false, updatable = false)
    private PersonDetails personDetails;

}

Мне нужны данные быть извлеченным, если addressExistFlag = 'Y' и existFlag = 'Y'.

В текущем сценарии Если я пытаюсь получить данные через репозиторий весеннего пакетного чтения, как показано ниже, рассматривается только existFlag = 'Y'. Это из-за неправильного отображения или способа, который я использовал в весенней партии

ReadRepository выглядит так, как показано ниже

public interface PersonDetailsRepository extends JpaRepository<PersonDetails, String> {
    Page<PersonDetails> findByExistFlag(String existFlag, Pageable pageable);
}

Хранилище Spring Batch Read выглядит так, как показано ниже

@Bean
RepositoryItemReader<PersonDetails> personDetailsItemReader() {
    Map<String, Sort.Direction> sort = new HashMap<>();
    sort.put("ExistFlag", Sort.Direction.ASC);
    return new RepositoryItemReaderBuilder<PersonDetails>()
            .repository(personDetailsRepository)
            .methodName("findByExistFlag")
            .arguments("Y")
            .sorts(sort)
            .name("personDetailsItemReader")
            .build();
}

1 Ответ

2 голосов
/ 30 марта 2020

Вы запрашиваете только для существующего флага.

Вы также должны добавить другой флаг:

public interface PersonDetailsRepository extends JpaRepository<PersonDetails, String> {
    Page<PersonDetails> findByExistFlagAndAddressDetailsAddressExistFlag(
                        String existFlag, String addressExistFlag, Pageable pageable);
}


@Bean
RepositoryItemReader<PersonDetails> personDetailsItemReader() {
    Map<String, Sort.Direction> sort = new HashMap<>();
    sort.put("ExistFlag", Sort.Direction.ASC);
    return new RepositoryItemReaderBuilder<PersonDetails>()
            .repository(personDetailsRepository)
            .methodName("findByExistFlagAndAddressDetailsAddressExistFlag")
            .arguments("Y", "Y")
            .sorts(sort)
            .name("personDetailsItemReader")
            .build();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...