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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate поиск по datetime 
V
    Опции темы
Ccoder
  Дата 1.4.2012, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте.
Столкнулся с непростой задачей.
Есть таблица в которой есть колонка с datetime.

Через String получаю дату полною либо частично например: "2012-06-30 18:00", "2012-06-30", "06-30"
Нужно както сделать запрос с hibernate и получить все объекты которые совпадают.

С SQL получается очень громадный код, с Hibernate search тоже чтото ненахожу.
Что делать незнаю
PM MAIL   Вверх
Samotnik
Дата 1.4.2012, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(Ccoder @  1.4.2012,  06:02 Найти цитируемый пост)
Есть таблица в которой есть колонка с datetime.

Какой у нее тип? Если хранится дата, то нужно работать с этим полем, как с датой, зачем получать стринг?
Цитата(Ccoder @  1.4.2012,  06:02 Найти цитируемый пост)
Нужно както сделать запрос с hibernate и получить все объекты которые совпадают.

можно использовать критерию например:
Код

List<ClassName> listDates = obj.createCriteria(ClassName.class).add(Restrictions.eq("yourDate", твоя_дата_с_которой_нужно_сравнивать)) .list()

Либо HQL
Код

"Select a from A a where a.date = твоя_дата"  

PM MAIL   Вверх
Ccoder
Дата 1.4.2012, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да дело в том что пользователь может ввести дату с временем абы как. Т.е. например только час или только месяц с днём. (ведь это поиск)
PM MAIL   Вверх
Samotnik
Дата 1.4.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(Ccoder @  1.4.2012,  09:45 Найти цитируемый пост)
Да дело в том что пользователь может ввести дату с временем абы как.

Согласен, но в бд не должна дата лежать "абы как", для этого нужно ставить проверки и преобразования, если нужно, в нормальный вид. В БД мусора быть не должно. 
PM MAIL   Вверх
Ccoder
Дата 1.4.2012, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да но мне поиск надо сделать.

Т.е.
Есть поле в таблице datetime и получаю например какую-либо дату(с временем) ввиде String (например "2012-06-30 18:00", "2012-06-30", "06-30")
Нужно по String (такой тип так как дата введённая нецелая) сделать запрос в таблицу и получить элементы где datetime имеет например дату 06-30("месяц-день") такой-же, но при этом час, минута, год может быть любой.

Добавлено через 45 секунд
В db она лежит в нормальном виде.
Например 2012.05.30 14:00:00,000000000

Добавлено через 2 минуты и 7 секунд
"Подводные камни"
PM MAIL   Вверх
Samotnik
Дата 1.4.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Ccoder
1. Это не подводные камни. Это вы сами себе костылей наставили, а теперь пытаетесь со своими же костылями работать. Если хранится дата, зачем пытаться работать с ней, как со стрингами?
2. Раз такое дело, пробуйте использовать SimpleDateFormat, для перевода String -> Date. И работать всё же с датами, как с типом преднезначеном для даты.
3. Если уж вообще, совсем никак не можете/хочете работать с типом Date, то можно использовать SQL, и String как дату. Запросы писать вида:
Код

"Select a from A a where a.date LIKE "начало_твоей_дата%""

Т.е. открывать sql wildcards и смотреть что можно сделать

Вобщем-то мега сложного ничего нет.  smile 
PM MAIL   Вверх
Ccoder
Дата 1.4.2012, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Слушай, а знаешь ты меня подтолкнул на хорошую мысль
Только надо ещё TO_CHAR

Добавлено через 2 минуты и 24 секунды
Ещёб интересно как три вида подстроки т.е. "%substring", ""%substring%", "substring%" не писать три раза. Т.е. "%substring" AND "%substring%" AND "substring%"
И всё это както сделать через hibernate

Добавлено через 3 минуты и 42 секунды
Там какая страшная большая технология есть - hibernate search.
Только это наверное не для меня.
Мне только нужно както с hibernate сделать запрос на строку в которой есть подстрока.
PM MAIL   Вверх
Samotnik
Дата 1.4.2012, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Я не работал с hibernate search. Но думаю, он тут не нужен. 

Цитата(Ccoder @  1.4.2012,  10:53 Найти цитируемый пост)
Ещёб интересно как три вида подстроки т.е. "%substring", ""%substring%", "substring%" не писать три раза. Т.е. "%substring" AND "%substring%" AND "substring%"
И всё это както сделать через hibernate

Для hibernate нормально писать HQL. Просто продумай наиболее оптимальное условие. В данном случае, для тебя одного %substring% хватит. Если у тебя подстрока будет 06-30, то под это условие попадут все твои три даты: "2012-06-30 18:00", "2012-06-30", "06-30"
PM MAIL   Вверх
Ccoder
Дата 1.4.2012, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну спасибо. Помог хорошо ты мне smile
PM MAIL   Вверх
Samotnik
Дата 1.4.2012, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



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

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

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


 




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


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

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