2016-11-29 6 views
0

У меня есть класс, который содержит отношения «один ко многим». Извлечение работало нормально, затем кто-то коснулся базы данных, и теперь извлечение не заполнило Set.Oracle One-to-Many Retrieve Fail, Hibernate 5.1.1.Final

Отношения:

Родитель Организация: Разрешение Период

@OneToMany(fetch=FetchType.LAZY, mappedBy = "permitPeriodEntity") 
@Cascade({CascadeType.ALL}) 
private Set<SubmittedFormEntity> submittedForms; 

дочернего объекта: Представлено Форма

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumns({ 
    @JoinColumn(name = "PERMIT_ID", insertable = false, updatable = false), 
    @JoinColumn(name = "PERIOD_ID", insertable = false, updatable = false) 
}) 
private PermitPeriodEntity permitPeriodEntity; 

Фактическое SQL Сформирован Когда я передать объект в Бульдозер (Lazy Load)

Hibernate: select submittedf0_.PERMIT_ID as PERMIT_ID9_21_0_, submittedf0_.PERIOD_ID as PERIOD_ID8_21_0_, submittedf0_.FORM_ID as FORM_ID1_21_0_, submittedf0_.FORM_ID as FORM_ID1_21_1_, submittedf0_.CREATED_BY as CREATED_BY2_21_1_, submittedf0_.CREATED_DT as CREATED_DT3_21_1_, submittedf0_.FORM_NUM as FORM_NUM4_21_1_, submittedf0_.FORM_TYPE_CD as FORM_TYPE_CD5_21_1_, submittedf0_.MODIFIED_BY as MODIFIED_BY6_21_1_, submittedf0_.MODIFIED_DT as MODIFIED_DT7_21_1_, submittedf0_.PERIOD_ID as PERIOD_ID8_21_1_, submittedf0_.PERMIT_ID as PERMIT_ID9_21_1_ from TU_SUBMITTED_FORM submittedf0_ where submittedf0_.PERMIT_ID=? and submittedf0_.PERIOD_ID=? 

Так зимует зовут SQL, чтобы загрузить эти данные лениво, когда я звоню бульдозер, чтобы отобразить его на мой новый боб, но в отладчике я вижу множество сущностей, хотя в настоящее время initialzed после отображения бульдозера, является пустой, даже если он должен иметь три записи.

Это работает буквально в течение двух недель, и я не изменил никакого кода. Любая идея, почему это вдруг перестанет работать?

+0

Я нашел проблему, изменив тип нагрузки на нетерпение. Спящий режим реверсирует столбцы соединения. Данные этапа, которые мы получили, имели комбинации разрешений/периодов 1,1 2,2 3,3. Теперь, когда мы видим реальные данные, он терпит неудачу, потому что он пытается присоединиться к allowId = periodId и наоборот. –

+0

Я не вернулся к своему компьютеру, но я бы предположил, что имя столбца с указанной ссылкой должно быть добавлено в мои столбцы соединения. –

ответ

0

Ответ заключался в том, что наши тестовые данные были установлены с равными значениями разрешений и периодов (1,1 2,2 3,3). Когда мы вытерли базу данных и начали использовать данные, сгенерированные приложением, PERMIT_ID и PERIOD_ID были изменены на противоположные, потому что я не включил атрибут referatedColumnName. Когда я изменил нагрузку на EAGER, оператор соединения сделал очень очевидным, что было неправильно (OUTER JOIN ON PermitPeriod.permitId = SubmittedForm.periodId AND PermitPeriod.periodId = SubmittedForm.permitId).

Ошибка времени выполнения была бы славной, спящей. Вместо этого вы сопоставляли столбцы случайно, даже если они были названы точно так же.