Michal Sipek
Michal Sipek

Reputation: 474

Hibernate query timeout exception - I can't save data to the database

I would like to save an article, but i got an exception. I don't know what do I do wrong. I have three entities: User.class, Category.class and Article.class.

User has these atributes:

Category has these atributes:

Article has these attributes:

There are my controller and JSP file.

ArticleController.class

@Controller
public class ArticleController {
@Autowired
ArticleService articleService;
@Autowired
CategoryService categoryService;
@Autowired
UserService userService;

@ModelAttribute("article")
public Article construct(){
    return new Article();
}

@RequestMapping("/admin/clanky")
public String articles(Model model){
    model.addAttribute("articles", articleService.findAll());
    model.addAttribute("categories", categoryService.findAll());
    model.addAttribute("users", userService.findAll());
    return "articles";
}

@RequestMapping(value="/admin/clanky", method=RequestMethod.POST)
public String saveArticle(@ModelAttribute("article") Article article, BindingResult result){
    Date publishDate = new Date();
    article.setPublishDate(publishDate);
    articleService.save(article);
    return "redirect:/admin/clanky.html?success=true";
}

@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
    dateFormat.setLenient(false);
    webDataBinder.registerCustomEditor(Date.class, "publishDate",
            new CustomDateEditor(dateFormat, false));
}

@InitBinder
protected void initBinder(HttpServletRequest request,
        ServletRequestDataBinder binder) throws Exception {
    binder.registerCustomEditor(Integer.class, new CustomNumberEditor(
            Integer.class, true));
}}

article.jsp

<form:form commandName="article" cssClass="form-horizontal">
<div class="form-group">
    <form:hidden path="id" class="form-control input-sm" />
</div>
<div class="form-group">
    <label for="title" class="col-sm-2 control-label">Title:</label>
    <div class="col-sm-10">
        <form:input path="title" cssClass="form-control" />
    </div>
</div>
<div class="form-group">
    <label for="content" class="col-sm-2 control-label">Content:</label>
    <div class="col-sm-10">
        <form:textarea path="content" cssClass="form-control" rows="10" />
    </div>
</div>
<div class="form-group">
    <label for="publishDate" class="col-sm-2 control-label">Category:</label>
    <div class="col-sm-10">
        <form:select path="categories" cssClass="form-control">
            <c:forEach items="${categories}" var="category">
                <form:option class="form-control" value="${category.id}">${category.name}</form:option>
            </c:forEach>
        </form:select>
    </div>
</div>
<div class="form-group">
    <label for="user" class="col-sm-2 control-label">User:</label>
    <div class="col-sm-10">
        <form:select path="user.id" cssClass="form-control">
            <c:forEach items="${users}" var="user">
                <form:option class="form-control" value="${user.id}">${user.name}</form:option>
            </c:forEach>
        </form:select>
    </div>
</div>

<div class="form-group">
    <div class="col-sm-2">
        <input type="submit" value="Uložit" class="btn btn-lg btn-primary">
    </div>
</div>

Could anyone help me, please?

There is a stack trace:

HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/QueryTimeoutException

type Exception report

message Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/QueryTimeoutException

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

exception

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/QueryTimeoutException
    org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1284)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:232)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
root cause

java.lang.NoClassDefFoundError: org/hibernate/QueryTimeoutException
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:644)
    org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:799)
    org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:669)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    com.sun.proxy.$Proxy21.save(Unknown Source)
    cz.michalsipek.blog.controller.ArticleController.saveArticle(ArticleController.java:55)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:232)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
root cause

java.lang.ClassNotFoundException: org.hibernate.QueryTimeoutException
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:644)
    org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:799)
    org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:669)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    com.sun.proxy.$Proxy21.save(Unknown Source)
    cz.michalsipek.blog.controller.ArticleController.saveArticle(ArticleController.java:55)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:232)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)

Upvotes: 1

Views: 6479

Answers (2)

Joabe Lucena
Joabe Lucena

Reputation: 812

I've got the same error when saving de object. Well It's weird but apparently hibernate doesn't understand 0 (zero) as a value for @Id columns. I was trying to save a referenced object and its @Id value was 0. So I changed the id value to 1 and it worked =S

Upvotes: 0

Richard Lewan
Richard Lewan

Reputation: 232

It looks to me like you are using Hibernate 3.x. If this is the case, I would make sure you are on version 3.6.10+ of Hibernate core. Older versions may not have the necessary class definition that the spring framework is looking for. The following link shows Hibernate 3.6.10 has the class definition you are missing: http://tool.oschina.net/uploads/apidocs/hibernate-3.6.10/org/hibernate/QueryTimeoutException.html

Upvotes: 1

Related Questions