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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate выводит одну строку несколько раз. 
V
    Опции темы
dEEp
Дата 21.5.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List list = session.createQuery("from Edge as edge where edge.id = ?").setInteger(0, 820521).list();
        session.getTransaction().commit();
        for (int i = 0; i < list.size(); i++) {
            Edge edge = (Edge) list.get(i);
            System.out.println("id: " + edge.getId() +
                            " x: " + edge.getX() +
                            " y: " + edge.getY());
        }
        HibernateUtil.getSessionFactory().close();


думаю в коде всё ясно. пытаемся получить все записи, удовлетворяющие запросу. Дело в том, что получаю результат:

Код

id: 820521 x: -3003.62 y: 6307.59
id: 820521 x: -3003.62 y: 6307.59
id: 820521 x: -3003.62 y: 6307.59


А кординаты должны быть разные. В базе всё хорошо. Пробовал сделать аналогично сделать вывод с использвоанием Spring'a, так там всё хорошо.

Кстати говоря, кол-во строк нормальное. Т.е. должны быть выведены 3 строки с одинаковым естесственно id и разными координатами.

У кого-нибудь есть мысли, почему так возникает?
Если нужны конф.файлы - выложу. 

Это сообщение отредактировал(а) dEEp - 21.5.2009, 19:01
PM MAIL   Вверх
AntonSaburov
Дата 21.5.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Похоже,  что джойнится еще одна таблица из-за какой-нибудь связи. Хорошо бы посмотреть оригинальный SQL, который генерится.

Мы решали что-то вроде

Criteria cr = session.createCriteria(StockTable.class);        
cr.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);



PM MAIL WWW ICQ   Вверх
dEEp
Дата 21.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а генерит он вот что:
Код

select edge0_.id as id0_, edge0_.x as x0_, edge0_.y as y0_
from v_road_graph edge0_ 
where edge0_.id=?


т.е. всё хорошо.


Edge.hbm.xml

Код

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="com.msi.tsp.graph.pojo.Edge" table="v_road_graph">
        <id name="id" column="id"/>
        <property name="x" column="x"/>
        <property name="y" column="y"/>
    </class>

</hibernate-mapping>



hibernate.cfg.xml

Код

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@[вырезано]</property>
        <property name="connection.username">[вырезано]</property>
        <property name="connection.password">[вырезано]</property>
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <mapping resource="Edge.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


про "Criteria..." понял. Но это не помогло.

Код

cr.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

это убрал. мне как раз и нужны эти 3 записи, но с разными координатами. А так получится запись будет одна.

Это сообщение отредактировал(а) dEEp - 21.5.2009, 19:41
PM MAIL   Вверх
dEEp
Дата 21.5.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



люди, хотя бы скажите что это может быть. вряд ли джойнится лишняя таблица. я полагаю что это специфика hibernate. возможно он полагает, что если поиск идёт по id, то запись будет одна. тогда странно, что выводит её трижды.
PM MAIL   Вверх
Старовъръ
Дата 22.5.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кто ж делает Id неуникальным? Без нормьного id падает производительность да и логика страдает)) Создай нормальный id, а если тебе еще какой-то вторичный id нужен, то сделай еще одно поле в классе.
PM MAIL WWW   Вверх
Kangaroo
Дата 22.5.2009, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



Включи полные логи Хайбернета и попробуй проследить по ним весь путь - от выполнения запроса до сохранения результа в список.


--------------------
Lost....
PM MAIL MSN   Вверх
dEEp
Дата 22.5.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Kangaroo @  22.5.2009,  03:04 Найти цитируемый пост)
Включи полные логи Хайбернета и попробуй проследить по ним весь путь - от выполнения запроса до сохранения результа в список. 

пока этого не делал, но сделаю. Сейчас объяснили, что это из-за ключа, который не является уникальным. Предложили сделать объединение через composite-id, но пока не разобрался как и чего с ним делать.

Цитата(Старовъръ @  22.5.2009,  00:23 Найти цитируемый пост)
Кто ж делает Id неуникальным? Без нормьного id падает производительность да и логика страдает)) Создай нормальный id, а если тебе еще какой-то вторичный id нужен, то сделай еще одно поле в классе. 

о да! а то я не знаю что id должен быть уникальным. вы как ребёнку объясняете. Вот такой есть id и его править не могу. Вообще базу трогать не могу. Моя задача подрубиться к базе через Hibernate. А до того что там в базе написано всё криво - мне нет дела. На Spring'ах вообще пробелм не возникает. Но нужен Hibernate.
PM MAIL   Вверх
AntonSaburov
Дата 22.5.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А на одноколесном велосипеде вокруг мира не надо ? smile
У каждого пакета и технолоогии есть определенные ограничения. И если у тебя ID не уникальный - то Hibernate тут работать нормально не сможет. Либо пиши свой собсвтенный.
Как-то странно выглядит - надо на Hibernate и все тут. Кстати причем тут Spring - я не понял. 
PM MAIL WWW ICQ   Вверх
dEEp
Дата 22.5.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(AntonSaburov @  22.5.2009,  13:01 Найти цитируемый пост)
А на одноколесном велосипеде вокруг мира не надо ? 

такой задачи не стояло. smile

Цитата(AntonSaburov @  22.5.2009,  13:01 Найти цитируемый пост)
У каждого пакета и технолоогии есть определенные ограничения. И если у тебя ID не уникальный - то Hibernate тут работать нормально не сможет. Либо пиши свой собсвтенный.

сказали composite-id спасёт. тем более учитывая то, что максимум что от базы надо - выборка с параметром и всё.

Цитата(AntonSaburov @  22.5.2009,  13:01 Найти цитируемый пост)
Как-то странно выглядит - надо на Hibernate и все тут. 

Ну как сказали, так и делаю. 

Цитата(AntonSaburov @  22.5.2009,  13:01 Найти цитируемый пост)
Кстати причем тут Spring - я не понял.  

JdbcTemplate (http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html)
PM MAIL   Вверх
Старовъръ
Дата 22.5.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

JdbcTemplate (http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html) 
Ну это собственно не Спринг спасает, а ЖДБС.
Цитата

Ну как сказали, так и делаю.
А намекнуть директору(или кому еще) нельзя насчет "неактуальности" принятого решения?
В Хибернете есть возможность делать sql-запросы. Look here. Полагаю это может спасти
PM MAIL WWW   Вверх
dEEp
Дата 22.5.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Старовъръ @  22.5.2009,  13:26 Найти цитируемый пост)
Ну это собственно не Спринг спасает, а ЖДБС.

Ну это понятно. Там по сути более "крутой" jdbc.

Цитата(Старовъръ @  22.5.2009,  13:26 Найти цитируемый пост)
А намекнуть директору(или кому еще) нельзя насчет "неактуальности" принятого решения? 

нужно обоснование. в документации hibernate я не нашёл, что он не умеет работать с таблицами, в которых ключ не уникален. если найти мануал, то можно попытать удачу.

Цитата(Старовъръ @  22.5.2009,  13:26 Найти цитируемый пост)

В Хибернете есть возможность делать sql-запросы. Look here. Полагаю это может спасти 

проблемы это не решает. так я мог бы и с JDBC решить всё.
PM MAIL   Вверх
Старовъръ
Дата 22.5.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

нужно обоснование. в документации hibernate я не нашёл, что он не умеет работать с таблицами, в которых ключ не уникален. если найти мануал, то можно попытать удачу.
Вот вроде об этом.
Цитата

проблемы это не решает. так я мог бы и с JDBC решить всё. 
Ты ж говорил, что обязательно нужен Хибернет!
PM MAIL WWW   Вверх
dEEp
Дата 22.5.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Старовъръ @  22.5.2009,  13:50 Найти цитируемый пост)
Вот вроде об этом.

читаю...

Цитата(Старовъръ @  22.5.2009,  13:50 Найти цитируемый пост)
Ты ж говорил, что обязательно нужен Хибернет! 

ну мог бы, но не делаю из-за жестких требований.
PM MAIL   Вверх
dEEp
Дата 22.5.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всё ребят. Спасибо вам всем большое. Сейчас правят базу. Будет уникальный id. Спасение нашлось. =)

Поднял бы вам всем репутацию, но не могу. Постов мало.

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

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

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


 




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


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

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