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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring + Hibernate, some problem with queries 
V
    Опции темы
goodday1941
Дата 10.2.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



и так, начал долбить хибернейт и наткнулся на проблемы: 

1. нужно выбрать все записи по условию выборки...

пишу что то по типу 
"from Data d where lower(d.path) like '%?%' order by d.path"
и сую в:
getHibernateTemplate().find();
но нужно как-то вместо ? поставить значение (как в ждбс припеад стейтмент);
с помощью какого метода в ХибернейтТемплейт это можно сделать?


2: хочу удалить все записи с таблицы, как это сделать с помощь спрингового ХибернейтТемплейт?

Это сообщение отредактировал(а) goodday1941 - 10.2.2008, 23:03


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
greef
Дата 11.2.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пример из документации
http://static.springframework.org/spring/d...ernate-template
   
Код

 public Collection loadProductsByCategory(String category) throws DataAccessException {
     return this.hibernateTemplate.find("from test.Product product where product.category=?", category);
    }


таким же образом можно и getHibernateTemplate().find();
PM MAIL   Вверх
goodday1941
Дата 11.2.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пасибо, а по поводу удалить записи по критерию?

Добавлено через 8 минут и 52 секунды
эм пишу:

Код

 public List search(String keywords){
        return getHibernateTemplate().find("from Data d where lower(d.path) like '%?%' order by d.path", keywords.toLowerCase());
    }


Вываливает:
Код

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.


exception 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:488)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)

root cause 
java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
    org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:55)
    org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:61)
    org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:397)
    org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:369)
    org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:846)
    org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:840)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:836)
    dao.hibernate.DataDaoImpl.search(DataDaoImpl.java:18)
    service.DataServiceImpl.search(DataServiceImpl.java:23)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
    $Proxy20.search(Unknown Source)
    controller.SearchController.onSubmit(SearchController.java:45)
    org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java:409)
    org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java:381)
    org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
    org.springframework.web.servlet.mvc.AbstractFormController.handleInvalidSubmit(AbstractFormController.java:671)
    org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:272)
    org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:858)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Llucas
Дата 11.2.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



В hibernate ты оперируешь не записями, а объектами.     

Код

getHibernateTemplate().delete(Object o); 


Вытащил объект из БД и вот в такой метод его передал.

Вижу ты используешь Spring?! Там вообще мудрить не надо:
Например:

 
Код

public List getSomeData(final String keywords, final int startPosition, final int rowCount) {
        return getHibernateTemplate().executeFind(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                StringBuffer sql= new StringBuffer("from Data as d where d.path like :keywords order by d.path ");

                query.setParameter("keywords ", keywords );

               
                query.setFirstResult(startPosition);//Если надо указать количество строк которое нужно выбрать
                query.setMaxResults(rowCount);

                List data = session.createQuery(buffer.toString()).list();
                return data == null ? new ArrayList() : data;
            }
        });
    }



Или наконец:

Код

public List getData(Integer id) {
        List data = getHibernateTemplate().find("from User u where u.id = ?",
                new Object[]{
                        id                        
                });
        return data != null ? data : new ArrayList();
    }



Есть еще варианты...


PM MAIL WWW   Вверх
goodday1941
Дата 11.2.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



для того что бы удалить все записи, нужно их сначала все выбрать.. как то не рационально smile

Добавлено через 3 минуты и 15 секунд
что такое кюери? нет такой переменной


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Llucas
Дата 11.2.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



Нет... не обязательно....  Просто чаще всего когда используешь хибернейт, все время работаешь с уже готовым объектом. А вообще можно удалить через execute используя условие.
PM MAIL WWW   Вверх
goodday1941
Дата 11.2.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 public List search(final String keywords) {
        return getHibernateTemplate().executeFind(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                return session.createQuery("from Data as d where d.path like :keywords order by d.path ").setParameter("keywords", keywords).list();
            }
        });
    }


сделал так но это не то что мне нужно.. от такого лайка толку ноль... как сделать так что бы можно было использовать %?

Добавлено через 9 минут и 57 секунд
и вот тут нужна консультация: сделал запрос на удаление так:
   
Код

 public void deleteAll() {
        getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                return session.createQuery("delete from Data").executeUpdate();
            }
        });
    }

в общем вопрос в следующем: это не криво? 


Это сообщение отредактировал(а) goodday1941 - 11.2.2008, 23:44


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Llucas
Дата 13.2.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



Цитата

что такое кюери? нет такой переменной 


Пардон sql. Код кривовато написал.

Цитата

сделал так но это не то что мне нужно.. от такого лайка толку ноль... как сделать так что бы можно было использовать %?


Затрудняюсь ответить, либо юзай для данного случая jdbc либо посмотри на hibernate.org

Цитата

в общем вопрос в следующем: это не криво?
 

Нормально smile



PM MAIL WWW   Вверх
goodday1941
Дата 17.2.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в ообще я по серчу сделал такс:

Код

 public List search(final List keywordsList) {
        return getHibernateTemplate().executeFind(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                StringBuffer sb = new StringBuffer("from Data as d ");
                if (!keywordsList.isEmpty()){
                   sb.append("where ");
                }
                Iterator iterator = keywordsList.iterator();
                while (iterator.hasNext()){
                    sb.append("lower(d.path) like ");
                    sb.append("'%");
                    sb.append(iterator.next());
                    sb.append("%' ");
                    if (iterator.hasNext()) sb.append("and ");
                }
                sb.append("order by d.path");
                return session.createQuery(sb.toString()).list();
            }
        });
    }


это то явно криво, но работает smile

ладно закрываю тему, всем спасибо smile


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1157 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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