Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HQL неправильно отрабатывает в тестах 
:(
    Опции темы
lamao
Дата 21.3.2013, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Есть две сущности Section & Branch.

Section.java
Код

public class Section extends Entity {
   ..............
    private Integer position;

    private List<Branch> branches = new ArrayList<Branch>();
...................
}


Branch.java
Код

public class Branch extends org.jtalks.common.model.entity.Branch
        implements SubscriptionAwareEntity {

    .......
}

public class Branch extends Entity { // org.jtalks.common.model.entity.Branch

   .......................
    private Integer position;
    private Section section;
   .....................
}


Section.hbm.xml
Код

<hibernate-mapping package="org.jtalks.jcommune.model.entity" auto-import="false">
    <class name="org.jtalks.common.model.entity.Section" table="SECTIONS">
        <cache usage="nonstrict-read-write" region="org.jtalks.EHCOMMON"/>
        <id column="SECTION_ID" name="id" unsaved-value="0">
            <generator class="native"/>
        </id>

        <property column="UUID" name="uuid" unique="true" not-null="true"/>
        <property name="name" column="NAME" not-null="true"/>
        <property name="description" column="DESCRIPTION"/>
        <property name="position" column="POSITION"/>

        <list name="branches" cascade="all-delete-orphan">
            <cache usage="nonstrict-read-write"/>
            <key column="SECTION_ID" foreign-key="FK_SECTION"/>
            <index column="POSITION"/>
            <one-to-many class="Branch"/>
        </list>
    </class>

</hibernate-mapping>


Branch.hbm.xml
Код

<hibernate-mapping package="org.jtalks.jcommune.model.entity" auto-import="false">
    <class name="org.jtalks.common.model.entity.Branch" table="BRANCHES">
        <cache usage="nonstrict-read-write" region="org.jtalks.EHCOMMON"/>
        <id column="BRANCH_ID" name="id" unsaved-value="0">
            <generator class="native"/>
        </id>

        <!-- 
           Used to make dummy hibernate hierarchy used in distributed cache.
        -->
        <discriminator>
            <formula>'BRANCH'</formula>
        </discriminator>

        <property column="UUID" name="uuid" unique="true" not-null="true"/>
        <property name="name" column="NAME" not-null="true"/>
        <property name="description" column="DESCRIPTION"/>
        <property name="position" column="POSITION"/>

        <many-to-one name="moderatorsGroup" column="MODERATORS_GROUP_ID" class="org.jtalks.common.model.entity.Group"
                     not-null="false"/>

        <many-to-one name="section" column="SECTION_ID" class="org.jtalks.common.model.entity.Section"
                     not-null="false"/>

        <subclass name="org.jtalks.jcommune.model.entity.Branch"
                  extends="org.jtalks.common.model.entity.Branch"
                  discriminator-value="BRANCH">
            <bag name="topics" cascade="all-delete-orphan"
                 order-by="sticked DESC, modificationDate DESC">
                <!--No caching here, see JC-378-->
                <key column="BRANCH_ID" foreign-key="FK_BRANCH"/>
                <one-to-many class="Topic"/>
            </bag>

            <set name="subscribers" table="BRANCH_SUBSCRIPTIONS" cascade="all">
                <cache usage="nonstrict-read-write"/>
                <key column="BRANCH_ID"/>
                <many-to-many column="USER_ID" class="org.jtalks.jcommune.model.entity.JCUser"/>
            </set>
            
            <many-to-one name="lastPost" column="LAST_POST" class="org.jtalks.jcommune.model.entity.Post" />
        </subclass>
    </class>

    <query name="getAllBranches">
        <![CDATA[FROM org.jtalks.jcommune.model.entity.Branch b ORDER BY b.section.position ASC, b.position ASC]]>
    </query>
</hibernate-mapping>


Само по себе работает все как надо. При получении веток они сортируются по указаным критериям правильно. Но в тестах почему-то установленное значение Branch.position игнорируется и считается, что у всех позиция одинаковая. Т.е. по факту они сортируются в порядке добавления. При этом там же сортировка по b.section.position работает правильно. 
Код теста следующий
Код

private List<Branch> createAndSaveBranchList(int size, int sectionPosition) {
        List<Branch> branches = new ArrayList<Branch>();
        Section section = ObjectsFactory.getDefaultSection();
        section.setPosition(sectionPosition);
        for (int i = 0; i < size; i++) {
            Branch newBranch = new Branch("Branch #" + i, "Branch #" + i);
            newBranch.setPosition(size - i - 1);
            section.addOrUpdateBranch(newBranch);
            newBranch.setSection(section);
            branches.add(newBranch);
        }   
        session.save(section);
        return branches;
    }

    @Test
    public void testGetAllBranches() {
        int sectionSize = 5;
        createAndSaveBranchList(sectionSize, 1);
        createAndSaveBranchList(sectionSize, 0);

        List<Branch> branches = dao.getAllBranches();

        assertEquals(sectionSize * 2, branches.size());
        Branch lastBranch = null;
        for (Branch branch : branches) {
            if (lastBranch != null) {
                // вот здесь валится, т.к. позиции бранчей почему-то 4 и 3, а не 0 и 1.
                assertTrue(branch.getPosition() >= lastBranch.getPosition()
                        || branch.getSection().getPosition() > lastBranch.getSection().getPosition());
                assertTrue(branch.getSection().getPosition() >= lastBranch.getSection().getPosition());
            }
            lastBranch = branch;
        }
    }


а метод в ДАО выглядит так
Код

@SuppressWarnings("unchecked")
    @Override
    public List<Branch> getAllBranches() {
        List<Branch> branches = getSession()
                .getNamedQuery("getAllBranches")
                .list();
        return branches;
    }


Что здесь не так? Где разница? Потому что я что-то ничего найти не могу...

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.