Anonymous
Критерии гибернации не работают должным образом
Сообщение
Anonymous » 27 янв 2026, 14:48
Я застрял в старом проекте и никогда раньше не использовал критерии спящего режима. Это база данных Oracle.
У меня есть запрос, в котором используются критерии. Вот критерии свалены.
Код: Выделить всё
criteria:CriteriaImpl(com.jsi.fullcourt.domain.caserole.Statute:st[][st.revision=Revision{id=1, description='201908', effectiveDate=2019-08-26, endDate=null, basedOn=null, statutes=37, uniqueBy='Statute Number'}, st.expungedIndicator=false, st.effectiveDate>=1971-01-09, st.inactive=false])
Этот запрос не возвращает строк.
Я думаю, это тот же запрос:
Код: Выделить всё
select id, JSI_NUMBER, DESCRIPTION, EFFECTIVE_DATE, INACTIVE, INACTIVE_DATE, REVISION_ID, EXPUNGED_INDICATOR, COMMON
from STATUTE
where REVISION_ID = 1
and EFFECTIVE_DATE >= to_date('1971-01-09', 'YYYY-MM-DD')
and EXPUNGED_INDICATOR = 0
and INACTIVE = 0
order by JSI_NUMBER;
И это возвращает одну строку.
Вот код, который создает критерии:
Код: Выделить всё
private Criteria getStatuteLookupCommonCriteria(StatuteLookupCriteria statuteLookupCriteria) {
System.err.println("getStatuteLookupCommonCriteria()");
Revision revision = null;
if (statuteLookupCriteria == null) {
return null;
}
if (statuteLookupCriteria.getRevisionId() == null) {
List revisions = ThreadSession.getSession().createCriteria(Revision.class).addOrder(Order.desc("effectiveDate")).list();
revision = revisions.get(0);
} else {
revision = (Revision) ThreadSession.getSession().get(Revision.class, statuteLookupCriteria.getRevisionId());
}
final Criteria criteria = ThreadSession.getSession().createCriteria(Statute.class, "st") //
.add(Restrictions.eq("st.revision", revision)) //
.add(Restrictions.eq("st.expungedIndicator", Boolean.FALSE));
if (SEARCH_TYPE_AOC.equalsIgnoreCase(statuteLookupCriteria.getSearchType())) {
if (isNotBlank(statuteLookupCriteria.getStatuteAocCode())) {
if (FCEPropertyUtils.isVariant(Variant.VA)) {
criteria.add(Restrictions.ilike("st.aocCode", statuteLookupCriteria.getStatuteAocCode(), MatchMode.START));
} else {
criteria.add(Restrictions.eq("st.aocCode", statuteLookupCriteria.getStatuteAocCode()));
}
}
} else {
String statuteMatchOn = isNotBlank(statuteLookupCriteria.getStatuteMatchOn()) && isStartMatch(statuteLookupCriteria.getStatuteMatchOn())
? statuteLookupCriteria.getStatuteMatchOn()
: MATCH_ANYWHERE;
MatchMode numberMatchMode = getFieldMatchMode(statuteLookupCriteria.getStatuteNumber(), statuteMatchOn);
MatchMode descriptionMatchMode = getFieldMatchMode(statuteLookupCriteria.getStatuteDescription(), statuteMatchOn);
if (isNotBlank(statuteLookupCriteria.getStatuteDescription())) {
criteria.add(Restrictions.ilike("st.description", formatValueWithSquareBrackets(statuteLookupCriteria.getStatuteDescription()),
descriptionMatchMode));
}
if (isNotBlank(statuteLookupCriteria.getStatuteNumber())) {
criteria.add(Restrictions.ilike("st.number", formatStatuteNumberForCriteria(statuteLookupCriteria.getStatuteNumber(), statuteMatchOn),
numberMatchMode));
}
if (statuteLookupCriteria.isStatuteCommon()) {
criteria.add(Restrictions.eq("st.common", Boolean.TRUE));
}
final LocalDate effectiveDate = statuteLookupCriteria.getStatuteEffectiveDate();
System.err.println("effectiveDate:" + effectiveDate);
if (effectiveDate != null) {
System.err.println("adding effectiveDate");
criteria.add(Restrictions.ge("st.effectiveDate", Date.valueOf(effectiveDate)));
}
final LocalDate inactiveDate = statuteLookupCriteria.getStatuteInactiveDate();
System.err.println("inactiveDate:" + inactiveDate);
if (inactiveDate != null) {
System.err.println("adding inactiveDate");
criteria.add(Restrictions.le("st.inactiveDate", Date.valueOf(inactiveDate)));
}
}
if (!CollectionUtils.isEmpty(statuteLookupCriteria.getStatuteDegreeIds())) {
criteria.createAlias("st.degree", "d");
criteria.add(Restrictions.in("d.ID", statuteLookupCriteria.getStatuteDegreeIds()));
}
if (!CollectionUtils.isEmpty(statuteLookupCriteria.getStatuteReportingCodeIds())) {
criteria.createAlias("st.reportingCodes", "rc");
criteria.add(Restrictions.in("rc.ID", statuteLookupCriteria.getStatuteReportingCodeIds()));
}
if (VIEW_ACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType()) || VIEW_INACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType())) {
criteria.add(Restrictions.eq("st.inactive", VIEW_INACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType()) ? Boolean.TRUE : Boolean.FALSE));
}
System.err.println("criteria:" + criteria);
return criteria;
}
Чего мне не хватает?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... s-expected
1769514517
Anonymous
Я застрял в старом проекте и никогда раньше не использовал критерии спящего режима. Это база данных Oracle. У меня есть запрос, в котором используются критерии. Вот критерии свалены. [code]criteria:CriteriaImpl(com.jsi.fullcourt.domain.caserole.Statute:st[][st.revision=Revision{id=1, description='201908', effectiveDate=2019-08-26, endDate=null, basedOn=null, statutes=37, uniqueBy='Statute Number'}, st.expungedIndicator=false, st.effectiveDate>=1971-01-09, st.inactive=false]) [/code] Этот запрос не возвращает строк. Я думаю, это тот же запрос: [code]select id, JSI_NUMBER, DESCRIPTION, EFFECTIVE_DATE, INACTIVE, INACTIVE_DATE, REVISION_ID, EXPUNGED_INDICATOR, COMMON from STATUTE where REVISION_ID = 1 and EFFECTIVE_DATE >= to_date('1971-01-09', 'YYYY-MM-DD') and EXPUNGED_INDICATOR = 0 and INACTIVE = 0 order by JSI_NUMBER; [/code] И это возвращает одну строку. Вот код, который создает критерии: [code]private Criteria getStatuteLookupCommonCriteria(StatuteLookupCriteria statuteLookupCriteria) { System.err.println("getStatuteLookupCommonCriteria()"); Revision revision = null; if (statuteLookupCriteria == null) { return null; } if (statuteLookupCriteria.getRevisionId() == null) { List revisions = ThreadSession.getSession().createCriteria(Revision.class).addOrder(Order.desc("effectiveDate")).list(); revision = revisions.get(0); } else { revision = (Revision) ThreadSession.getSession().get(Revision.class, statuteLookupCriteria.getRevisionId()); } final Criteria criteria = ThreadSession.getSession().createCriteria(Statute.class, "st") // .add(Restrictions.eq("st.revision", revision)) // .add(Restrictions.eq("st.expungedIndicator", Boolean.FALSE)); if (SEARCH_TYPE_AOC.equalsIgnoreCase(statuteLookupCriteria.getSearchType())) { if (isNotBlank(statuteLookupCriteria.getStatuteAocCode())) { if (FCEPropertyUtils.isVariant(Variant.VA)) { criteria.add(Restrictions.ilike("st.aocCode", statuteLookupCriteria.getStatuteAocCode(), MatchMode.START)); } else { criteria.add(Restrictions.eq("st.aocCode", statuteLookupCriteria.getStatuteAocCode())); } } } else { String statuteMatchOn = isNotBlank(statuteLookupCriteria.getStatuteMatchOn()) && isStartMatch(statuteLookupCriteria.getStatuteMatchOn()) ? statuteLookupCriteria.getStatuteMatchOn() : MATCH_ANYWHERE; MatchMode numberMatchMode = getFieldMatchMode(statuteLookupCriteria.getStatuteNumber(), statuteMatchOn); MatchMode descriptionMatchMode = getFieldMatchMode(statuteLookupCriteria.getStatuteDescription(), statuteMatchOn); if (isNotBlank(statuteLookupCriteria.getStatuteDescription())) { criteria.add(Restrictions.ilike("st.description", formatValueWithSquareBrackets(statuteLookupCriteria.getStatuteDescription()), descriptionMatchMode)); } if (isNotBlank(statuteLookupCriteria.getStatuteNumber())) { criteria.add(Restrictions.ilike("st.number", formatStatuteNumberForCriteria(statuteLookupCriteria.getStatuteNumber(), statuteMatchOn), numberMatchMode)); } if (statuteLookupCriteria.isStatuteCommon()) { criteria.add(Restrictions.eq("st.common", Boolean.TRUE)); } final LocalDate effectiveDate = statuteLookupCriteria.getStatuteEffectiveDate(); System.err.println("effectiveDate:" + effectiveDate); if (effectiveDate != null) { System.err.println("adding effectiveDate"); criteria.add(Restrictions.ge("st.effectiveDate", Date.valueOf(effectiveDate))); } final LocalDate inactiveDate = statuteLookupCriteria.getStatuteInactiveDate(); System.err.println("inactiveDate:" + inactiveDate); if (inactiveDate != null) { System.err.println("adding inactiveDate"); criteria.add(Restrictions.le("st.inactiveDate", Date.valueOf(inactiveDate))); } } if (!CollectionUtils.isEmpty(statuteLookupCriteria.getStatuteDegreeIds())) { criteria.createAlias("st.degree", "d"); criteria.add(Restrictions.in("d.ID", statuteLookupCriteria.getStatuteDegreeIds())); } if (!CollectionUtils.isEmpty(statuteLookupCriteria.getStatuteReportingCodeIds())) { criteria.createAlias("st.reportingCodes", "rc"); criteria.add(Restrictions.in("rc.ID", statuteLookupCriteria.getStatuteReportingCodeIds())); } if (VIEW_ACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType()) || VIEW_INACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType())) { criteria.add(Restrictions.eq("st.inactive", VIEW_INACTIVE.equalsIgnoreCase(statuteLookupCriteria.getViewType()) ? Boolean.TRUE : Boolean.FALSE)); } System.err.println("criteria:" + criteria); return criteria; } [/code] Чего мне не хватает? Подробнее здесь: [url]https://stackoverflow.com/questions/79874698/hibernate-criteria-not-working-as-expected[/url]