| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Hibernate выводит одну строку несколько раз. |
| Автор: dEEp 21.5.2009, 19:01 | ||||
думаю в коде всё ясно. пытаемся получить все записи, удовлетворяющие запросу. Дело в том, что получаю результат:
А кординаты должны быть разные. В базе всё хорошо. Пробовал сделать аналогично сделать вывод с использвоанием Spring'a, так там всё хорошо. Кстати говоря, кол-во строк нормальное. Т.е. должны быть выведены 3 строки с одинаковым естесственно id и разными координатами. У кого-нибудь есть мысли, почему так возникает? Если нужны конф.файлы - выложу. |
| Автор: AntonSaburov 21.5.2009, 19:13 |
| Похоже, что джойнится еще одна таблица из-за какой-нибудь связи. Хорошо бы посмотреть оригинальный SQL, который генерится. Мы решали что-то вроде Criteria cr = session.createCriteria(StockTable.class); cr.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); |
| Автор: dEEp 21.5.2009, 19:22 | ||||||||
а генерит он вот что:
т.е. всё хорошо. Edge.hbm.xml
hibernate.cfg.xml
про "Criteria..." понял. Но это не помогло.
это убрал. мне как раз и нужны эти 3 записи, но с разными координатами. А так получится запись будет одна. |
| Автор: dEEp 21.5.2009, 19:56 |
| люди, хотя бы скажите что это может быть. вряд ли джойнится лишняя таблица. я полагаю что это специфика hibernate. возможно он полагает, что если поиск идёт по id, то запись будет одна. тогда странно, что выводит её трижды. |
| Автор: Старовъръ 22.5.2009, 00:23 |
| Кто ж делает Id неуникальным? Без нормьного id падает производительность да и логика страдает)) Создай нормальный id, а если тебе еще какой-то вторичный id нужен, то сделай еще одно поле в классе. |
| Автор: Kangaroo 22.5.2009, 03:04 |
| Включи полные логи Хайбернета и попробуй проследить по ним весь путь - от выполнения запроса до сохранения результа в список. |
| Автор: AntonSaburov 22.5.2009, 13:01 |
| А на одноколесном велосипеде вокруг мира не надо ? У каждого пакета и технолоогии есть определенные ограничения. И если у тебя ID не уникальный - то Hibernate тут работать нормально не сможет. Либо пиши свой собсвтенный. Как-то странно выглядит - надо на Hibernate и все тут. Кстати причем тут Spring - я не понял. |
| Автор: dEEp 22.5.2009, 13:09 | ||
такой задачи не стояло.
сказали composite-id спасёт. тем более учитывая то, что максимум что от базы надо - выборка с параметром и всё. Ну как сказали, так и делаю. JdbcTemplate (http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html) |
| Автор: Старовъръ 22.5.2009, 13:26 | ||||
В Хибернете есть возможность делать sql-запросы. Look http://swik.net/Hibernate/Using+SQL+From+Within+Hibernate. Полагаю это может спасти |
| Автор: dEEp 22.5.2009, 13:30 | ||||
Ну это понятно. Там по сути более "крутой" jdbc.
нужно обоснование. в документации hibernate я не нашёл, что он не умеет работать с таблицами, в которых ключ не уникален. если найти мануал, то можно попытать удачу.
проблемы это не решает. так я мог бы и с JDBC решить всё. |
| Автор: Старовъръ 22.5.2009, 13:50 | ||||
|
| Автор: dEEp 22.5.2009, 13:53 |
читаю... ну мог бы, но не делаю из-за жестких требований. |
| Автор: dEEp 22.5.2009, 15:19 |
| Всё ребят. Спасибо вам всем большое. Сейчас правят базу. Будет уникальный id. Спасение нашлось. =) Поднял бы вам всем репутацию, но не могу. Постов мало. |