По какой-то причине я возвращаю 9 строк повторяющихся данных, используя этот запрос в моем хранилище.
@Query("select distinct profile from OfficeProfile profile where profile.fcoDesignCd in
(select officeLocation.asccode from OfficeLocation officeLocation, OfficeProfile profile
where officeLocation.statecode = :stateCode and officeLocation.asccode = profile.fcoDesignCd)")
public List<OfficeProfile> searchStateASC(@Param("stateCode") String stateCode);
SQL-запрос, который возвращает 9 различных строк данных, приведен ниже. Запросы кажутся идентичными.
select
op.FCO_DESIGN_CD,
op.office_addr_line1,
op.office_addr_line2,
op.office_addr_state,
op.office_addr_zip
from cridba.office_profile op
where op.fco_design_cd in (
select asc_code from cridba.cris_lk_location cll , cridba.office_profile op
where cll.state_code='VA'
and cll.asc_code = op.fco_design_cd);
Вот как я перебираю значения. Я установил свой отладчик и заметил те же 9 значений с идентификаторами.
for(OfficeProfile locationInfo: officeLocatorRepository.searchStateASC(stateCode))
Вот мои отношения сущности.
Офисный профиль (родитель)
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "profile")
private Set<OfficeLocation> officeLocation = new HashSet<>(0);
Местоположение офиса (ребенок)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "asc_code", referencedColumnName = "fco_design_cd", nullable = false, insertable=false,
updatable=false)
public OfficeProfile profile;
Я переопределяю equals и hashcode в обоих классах. Так как я присоединяюсь к этим таблицам, используя asc_code, я переопределяю это или id? или оба? Вот что у меня так далеко.
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
OfficeProfile officeProfile = (OfficeProfile) o;
if (officeProfile.getId() == null || getId() == null) {
return false;
}
return Objects.equals(getId(), officeProfile.getId());
}
@Override
public int hashCode() {
return Objects.hashCode(getId());
}
Должен ли я добавить @Id в fcoDesignCd, даже если эта таблица уже имеет идентификатор? fcoDesignCd столбец, на который ссылаются, в соединении?
@Column(name = "fco_design_cd")
private String fcoDesignCd;
HQL вывод ...
select distinct officeprof0_.office_type_id as office_type_id1_1_, ......
from cridba.office_profile officeprof0_ where officeprof0_.fco_design_cd in
(select officeloca1_.asc_code
from cridba.cris_lk_location officeloca1_, cridba.office_profile
officeprof2_ where officeloca1_.state_code=? and
officeloca1_.asc_code=officeprof2_.fco_design_cd)
Похоже ли это на правильный путь? JPA Как добавить уникальное ограничение для столбца для отношения @OneToMany, как для имени пользователя