"Это мой SQL, который я хочу преобразовать в Критию:
выберите be. * Из BlogEntry присоединиться к блогу b на be.blog = b.id присоединиться к подписчику f на b.id = f.blogId, где be.publishStatus = 'опубликовано' и be.secured = false и f.user =? объединение выбрать be1. * из BlogEntry be1 присоединиться к SecureUser s на be1.id = s.blogEntryId присоединиться к пользователю u на s.userProfile = u.userProfile и u.id =? заказ по publishDate desc ";
привет, ребята. Я пытался использовать HQL и нативный SQL для выполнения вышеуказанного запроса, и я был разочарован на каждом шагу, по большей части, потому что выполнение UNION в Hibernate супер неловко. даже если вы попробуете SQLQuery, у вас все еще будет полный беспорядок установления отношений между сущностями, поскольку вы будете вынуждены включать каждый отдельный атрибут каждого подкласса, на который есть ссылка в SQL. это оказывается полной болью, чтобы пройти.
Итак, я перехожу к возможному решению запроса критериев, но я думаю, что мне нужна помощь. приведенный ниже запрос полностью подходит для MySQL и работает быстро, как молния. Горб, который я пытаюсь преодолеть с помощью критерия, заключается в том, что некоторые из моих отношений сущностей определяются ссылками на внешние ключи в таблицах, а некоторые нет. когда они есть, я, конечно, могу сделать что-то вроде этого (что оценивает часть моего запроса перед UNION):
ExtendedDetachedCriteria entryDetachedCriteria = extendedDetachedCriteria.forClass (BlogEntry.class);
entryDetachedCriteria.createAlias ( "blogEntry", "blogEntry");
entryDetachedCriteria.createAlias ("blogEntry.blog", "blog");
и т. Д. И т. Д. *
ОДНАКО, когда я присоединяюсь к данным другим способом, как в этой части SQL:
выберите be1. * Из BlogEntry be1 присоединитесь к SecureUser s по be1.id = s.blogEntryId (в таблицах не определено фактическое отношение внешнего ключа, сущности SecureUser просто помечаются соответствующим идентификатором BlogEntry при их создании)
как мне писать запросы критериев иначе, чем показано выше?
Я понимаю, что подобные вопросы - это полная боль, чтобы заставить вас задуматься, если вы еще не до конца пытаетесь решить - пожалуйста, извините за запутанность вопроса, который я задаю. Я был бы очень признателен за любые рекомендации, которые кто-то мог бы предложить, даже если это «соберись в спячку, да, глупец!». вроде застрял на данный момент.