powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, итератор, непонятное исключение.
10 сообщений из 10, страница 1 из 1
Hibernate, итератор, непонятное исключение.
    #33046097
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Iterator iterator = getHibernateTemplate().iterate(query);
while (iterator .hasNext()){
Object o = iterator.next(); /*<--- ИСКЛЮЧЕНИЕ ЗДЕСЬ*/
}


что сделать чтоб от него избавиться


2005-05-03 16:35:34,072 WARN [net.sf.hibernate.impl.BatcherImpl] - exception clearing maxRows/queryTimeout
java.sql.SQLException: PreparedStatement is closed.
at org.apache.commons.dbcp.DelegatingPreparedStatement.checkOpen(DelegatingPreparedStatement.java:271)
at org.apache.commons.dbcp.DelegatingPreparedStatement.getMaxRows(DelegatingPreparedStatement.java:211)
at net.sf.hibernate.impl.BatcherImpl.closeQueryStatement(BatcherImpl.java:149)
at net.sf.hibernate.impl.BatcherImpl.closeQueryStatement(BatcherImpl.java:105)
at net.sf.hibernate.impl.IteratorImpl.close(IteratorImpl.java:72)
at net.sf.hibernate.impl.IteratorImpl.postNext(IteratorImpl.java:88)
at net.sf.hibernate.impl.IteratorImpl.next(IteratorImpl.java:127)
at hiberdata.LinkcheckerImp1.createComboboxEditionsByWhereExpression(LinkcheckerImp1.java:234)
at processing.configuraton.ConfigurationModelCreater.create(ConfigurationModelCreater.java:46)
at controller.ConfigurationDefinitionController.handleRequest(ConfigurationDefinitionController.java:69)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:675)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:623)
at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:384)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046229
Steppenwulf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getHibernateTemplate() - это что такое??
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046269
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SteppenwulfgetHibernateTemplate() - это что такое??

Это в спринге фича такая.

Пусть на его месте session будет:

Iterator iterator = session.iterate(query);
while (iterator .hasNext()){
Object o = iterator.next(); /*<--- ИСКЛЮЧЕНИЕ ЗДЕСЬ*/
}
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046300
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда вопрос другой.

Рассмотрим DBCP томката.

http://]http://jakarta.apache.org/commons/dbcp/apidocs/index.html

Есть класс:

DelegatingPreparedStatement

с методами:

void setMaxRows(int max)

void setQueryTimeout(int seconds)

Можно ли прописать значения max, и seconds в xml - конфиге (web-xml томката или в server.xml)
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046436
Steppenwulf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexey Turn

ясно
посмотрите в исходном коде hibernate
судя по exception, Вы используете hibernate 2 версии
класс BatcherImpl, метод closeQueryStatement
в нем видим, что вызываются методы интерфейса PreparedStatement, которые могут быть не реализованы в некоторых драйверах jdbc, например, если память мне не изменяет, ps.getMaxRows() не работает в jayBird ("not implemented yet"). Так что возможно, дело в jdbc-драйвере.

Прописать эти параметры в xml нельзя.

В любом случае этот exception не должен критически повлиять на работу приложения, просто добавляется запись об ошибке в лог.
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046547
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм.. допустим у меня есть запрос "select cat from Cat as cat"
И мне нужно результаты этого запроса доставить на уровень представления.
то есть отобразить в List особым способом.

Я пишу класс Combobox, который обертывает List и в котором есть метод addOption(String id, String value, String selected);

Теперь у меня есть 2 способа отобразить в Combobox:

1)
Combobox c = new Combobox();

List listCats = session.find("select cat from Cat as cat");

for (int i=0;i<listCats.size();i++){
Cat cat = (Cat) listCats.get(i);
c.addOption(new Option(cat.getId(),cat.getValue,cat.getSelected()));
}
2)

Combobox c = new Combobox();

Iterator listCats = session.iterate("select cat from Cat as cat");

while (listCats.hasNext()){
Cat cat = (Cat) listCats.next();
c.addOption(new Option(cat.getId(),cat.getValue,cat.getSelected()));
}

Второй способ у меня не получается.
А первый работает медленно, потому что мы формируем листы дважды.

Какие есть выходы в этом случае? Использовать Native sql?
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33046618
Steppenwulf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему бы не использовать session.createFilter?
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33047224
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
createFilter
public Query createFilter(Object collection,
String queryString)
throws HibernateException

Create a new instance of Query for the given collection and filter string.
(Создает новый экземпляр запроса для данной коллекции и строки фильтра)

Parameters:
collection - a persistent collection
queryString - a Hibernate query
Returns:
Query
Throws:
HibernateException

А можно поподробней как это может мне помочь?
Пример можно?
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33049228
^ozzy^
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была такая же ошибка ... Ничего путнего кроме как воспользоваться
getHibernateTemplate().find(query).iterator()
в голову не пришло ...
Зато так - все нормально
...
Рейтинг: 0 / 0
Hibernate, итератор, непонятное исключение.
    #33049509
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я нашел ответ на этот вопрос вчера буквально.
Почитал spring API:
И вот что там написано:

public class HibernateTemplate
extends HibernateAccessor
implements HibernateOperations

Note that operations that return an Iterator (i.e. iterate) are supposed to be used within Spring-driven or JTA-driven transactions (with HibernateTransactionManager, JtaTransactionManager, or EJB CMT). Else, the Iterator won't be able to read results from its ResultSet anymore, as the underlying Hibernate Session will already have been closed.

Lazy loading will also just work with an open Hibernate Session, either within a transaction or within OpenSessionInViewFilter/Interceptor. Furthermore, some operations just make sense within transactions, for example: contains, evict, lock, flush, clear.

Впринципе понятно, несмотря на мой англиский, но был бы благодарен тому, кто это прокомментирует.

А действие find(query).iterator() для меня смысла не имеет, так как по листу я могу тем же for пробежать.. да чем угодно.

Главной проблемой стояла производительность, т.е. я не хотел переколбасивать один лист в другой.

Я решил это следующим образом: просто оборачиваю полученный find(query) List в value object, который будет отображаться на jsp.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, итератор, непонятное исключение.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]