Проблема при получении объекта с использованием HQL - PullRequest
0 голосов
/ 16 января 2011

Я новичок в спящем режиме и пытаюсь изучить его гайки и болты. У меня есть таблица 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 для уже существующего назначения, кажется, что он сталкивается с какими-то циклическими ссылками, но я не уверен, как этого избежать, или есть какой-то лучший способ проверить уже существующий объект на основе уникального ключа (не первичного ключа)

Заранее спасибо

1 Ответ

0 голосов
/ 17 января 2011

используйте эту опцию inverse = "false" lazy = "false" fetch = "join". Проблема с lazy = true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...