Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Java Hibernate Formula Problem

37K
05 июня 2009 года
tanatoss
7 / / 18.05.2008
Доброго Времени суток

У меня проблема с использованием @formula свойства в мапинге.
База данных - MySql
Вот код:
Код:
public class IssueBean extends AbstractPersistableBean {
    private boolean leaf;

        // ...

    public boolean isLeaf() {
        return leaf;
    }

    void setLeaf(boolean leaf) {
        this.leaf = leaf;
    }
}

А вот мапинг к нему:
 
Код:
<class name="IssueBean" table="issues">
        <!--...-->
    <property name="leaf"
        insert="false"
        update="false"
        formula="(select count(chld.id)=0 from issues chld where chld.root=id)"
        type="boolean"/>
</class>

Кеш отключен:
 
Код:
hibernate.current_session_context_class = thread
hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

используемый HQL:
 
Код:
public List<IssueBean> selectForRoot(Long root) {
    return executeHQL("from IssueBean issue where issue.root=?",root);
}

Пока в текущем запуске сервера не произошло inserta все идет нормально. Новые же объекты начинают глючить (leaf устанавливается в true, хотя дожен быть false). При этом если выполнить тот же запрос в каком-нибудь стороннем обозревателе БД - все отрабатывает корректно.

К примеру имеем следующую базу:
 
Код:
id root
1   0
2   1
3   1

вставляем новую запись и получаем
 
Код:
id root
1   0
2   1
3   1
4   3

теперь в том же запуске сервера пытаемся извлечь IssueBean(@id=3)
SQL генерируется Гибернейтом следующий:
 
Код:
select issuebean0_.id as id3_, issuebean0_.root as root3_, (select count(chld.id)=0 from issues chld where chld.root=issuebean0_.id) as formula0_ from issues issuebean0_ where issuebean0_.root=?

при выполнении с параметром равным 3 в обозревателе базы данных formula0_ возвращается 0, тогда как возвращенный IssueBean(@id=3).leaf=true.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог