Я новичок в спящем режиме и пытаюсь изучить его гайки и болты. У меня есть таблица Destination, у которой есть destinationid в качестве уникального ключа, а также UUID в качестве уникального ключа в таблице назначения.
я хочу предоставить метод, с помощью которого пользователь может получать Destination на основе destinationid, поэтому я попытался использовать HQL, как показано ниже
Session session=getSessionFactory().getCurrentSession();
Destination destination=null;
String queryString="from Destination destination "+
"where destination.destinationID = :destinationid";
Query query= session.createQuery(queryString).setParameter("destinationid", destinationId, Hibernate.STRING);
@SuppressWarnings("unchecked")
List<Destination> list=qu
ery.list ();
мой класс Destination имеет ссылку на многие другие подклассы как коллекцию, все из которых были определены как ленивая загрузка
<set name="roadTransport" table="ROADTRANSPORT" inverse="true" lazy="true" cascade="save-update">
существует около 9-10 классов, которые перефразируются из класса Desttination, и все они загружаются лениво.
Я импортирую целевой XML-файл, и этот XML-файл предоставляется какой-то третьей системой, поэтому я не могу связать UUID, и мне нужно решить, должен ли импорт выполняться в режиме обновления или для нового конечного пункта. Единственный способ найти, чтобы проверить, находится ли пункт назначения в БД или нет.
Моя проблема связана с новым назначением, вышеупомянутый HQL-запрос работает нормально, и новое назначение импортируется в БД, но для существующего кажется, что оно не работает должным образом, и Query, кажется, находится в зависшем состоянии
Hibernate:
/*
from
Destination destination
where
destination.destinationID = :destinationid */ select
destinatio0_.UUID as UUID0_,
destinatio0_.DESTINATIONID as DESTINAT2_0_,
destinatio0_.NAME as NAME0_,
destinatio0_.SHORTDESCRIPTION as SHORTDES4_0_,
destinatio0_.LONGDESCRIPTION as LONGDESC5_0_,
destinatio0_.IMAGE as IMAGE0_,
destinatio0_.GALLERYPATH as GALLERYP7_0_,
destinatio0_.RATING as RATING0_,
destinatio0_.LASTMODIFIED as LASTMODI9_0_,
destinatio0_.CREATIONDATE as CREATIO10_0_,
destinatio0_.STATEID as STATEID0_,
destinatio0_.TYPECODE as TYPECODE0_,
destinatio0_.COUNTRYCODE as COUNTRY13_0_,
destinatio0_.POPULARITY as POPULARITY0_
from
travellingrants.DESTINATION destinatio0_
where
destinatio0_.DESTINATIONID=?
Hibernate:
/* load com.raisonne.tr.model.destination.destinationattributes.Culture */ select
culture0_.UUID as UUID4_2_,
culture0_.SHORTDESCRIPTION as SHORTDES2_4_2_,
culture0_.LONGDESCRIPTION as LONGDESC3_4_2_,
culture0_.CREATIONDATE as CREATION4_4_2_,
culture0_.LASTMODIFIED as LASTMODI5_4_2_,
destinatio1_.UUID as UUID0_0_,
destinatio1_.DESTINATIONID as DESTINAT2_0_0_,
destinatio1_.NAME as NAME0_0_,
destinatio1_.SHORTDESCRIPTION as SHORTDES4_0_0_,
destinatio1_.LONGDESCRIPTION as LONGDESC5_0_0_,
destinatio1_.IMAGE as IMAGE0_0_,
destinatio1_.GALLERYPATH as GALLERYP7_0_0_,
destinatio1_.RATING as RATING0_0_,
destinatio1_.LASTMODIFIED as LASTMODI9_0_0_,
destinatio1_.CREATIONDATE as CREATIO10_0_0_,
destinatio1_.STATEID as STATEID0_0_,
destinatio1_.TYPECODE as TYPECODE0_0_,
destinatio1_.COUNTRYCODE as COUNTRY13_0_0_,
destinatio1_.POPULARITY as POPULARITY0_0_,
culture2_.UUID as UUID4_1_,
culture2_.SHORTDESCRIPTION as SHORTDES2_4_1_,
culture2_.LONGDESCRIPTION as LONGDESC3_4_1_,
culture2_.CREATIONDATE as CREATION4_4_1_,
culture2_.LASTMODIFIED as LASTMODI5_4_1_
from
travellingrants.CULTURE culture0_
left outer join
travellingrants.DESTINATION destinatio1_
on culture0_.UUID=destinatio1_.UUID
left outer join
travellingrants.CULTURE culture2_
on destinatio1_.UUID=culture2_.UUID
where
culture0_.UUID=?
Я новичок в hibernate, но после просмотра запроса, сгенерированного hibernate для уже существующего назначения, кажется, что он сталкивается с какими-то циклическими ссылками, но я не уверен, как этого избежать, или есть какой-то лучший способ проверить уже существующий объект на основе уникального ключа (не первичного ключа)
Заранее спасибо