9

Can't find error ((

Spring MVC + Hibernate, JavaConfig

WebAppConfig:

package com.sprhib.init;
import java.util.Properties;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
@Configuration
@ComponentScan("com.sprhib")
@EnableWebMvc
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
public class WebAppConfig {
 private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
 private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
 private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
 private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
 private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
 private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
 private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
 @Resource
 private Environment env;
 @Bean
 public DataSource dataSource() {
 DriverManagerDataSource dataSource = new DriverManagerDataSource();
 dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
 dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
 dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
 dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
 return dataSource;
 }
 @Bean
 public LocalSessionFactoryBean sessionFactory() {
 LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
 sessionFactoryBean.setDataSource(dataSource());
 sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
 sessionFactoryBean.setHibernateProperties(hibProperties());
 return sessionFactoryBean;
 }
 private Properties hibProperties() {
 Properties properties = new Properties();
 properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
 properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
 return properties; 
 }
 @Bean
 public HibernateTransactionManager transactionManager() {
 HibernateTransactionManager transactionManager = new HibernateTransactionManager();
 transactionManager.setSessionFactory(sessionFactory().getObject());
 return transactionManager;
 }
 @Bean
 public UrlBasedViewResolver setupViewResolver() {
 UrlBasedViewResolver resolver = new UrlBasedViewResolver();
 resolver.setPrefix("/WEB-INF/pages/");
 resolver.setSuffix(".jsp");
 resolver.setViewClass(JstlView.class);
 return resolver;
 }
}

User

package com.sprhib.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.sql.Timestamp;
@Entity
@Table(name="user")
public class User {
 @Id
 @GeneratedValue
 private Integer id;
 private String name;
 private Integer age;
 private Boolean isAdmin;
 private Timestamp createdDate;
 public Integer getId() {
 return id;
 }
 public void setId(Integer id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public Integer getAge() {
 return age;
 }
 public void setAge(Integer age) {
 this.age = age;
 }
 public Boolean getAdmin() {
 return isAdmin;
 }
 public void setAdmin(Boolean admin) {
 isAdmin = admin;
 }
 public Timestamp getCreatedDate() {
 return createdDate;
 }
 public void setCreatedDate(Timestamp createdDate) {
 this.createdDate = createdDate;
 }
}
package com.sprhib.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.sprhib.model.User;
@Repository
public class UserDAOImpl implements UserDAO {
 @Autowired
 private SessionFactory sessionFactory;
 private Session getCurrentSession() {
 return sessionFactory.getCurrentSession();
 }
 public void addUser(User user) {
 getCurrentSession().save(user);
 }
 public void updateUser(User user) {
 User userUpdate = getUser(user.getId());
 userUpdate.setName(user.getName());
 userUpdate.setAge(user.getAge());
 userUpdate.setAdmin(user.getAdmin());
 userUpdate.setCreatedDate(user.getCreatedDate());
 getCurrentSession().update(userUpdate);
 }
 public User getUser(int id) {
 return (User)getCurrentSession().get(User.class,id);
 }
 public void deleteUser(int id) {
 User user = getUser(id);
 if (user!=null)
 getCurrentSession().delete(user);
 }
 public List<User> getUsers() {
 System.out.println("zzz");
 return getCurrentSession().createQuery("FROM User").list();
 }
}

UserDAOImpl:

package com.sprhib.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.sprhib.model.User;
@Repository
public class UserDAOImpl implements UserDAO {
 @Autowired
 private SessionFactory sessionFactory;
 private Session getCurrentSession() {
 return sessionFactory.getCurrentSession();
 }
 public void addUser(User user) {
 getCurrentSession().save(user);
 }
 public void updateUser(User user) {
 User userUpdate = getUser(user.getId());
 userUpdate.setName(user.getName());
 userUpdate.setAge(user.getAge());
 userUpdate.setAdmin(user.getAdmin());
 userUpdate.setCreatedDate(user.getCreatedDate());
 getCurrentSession().update(userUpdate);
 }
 public User getUser(int id) {
 return (User)getCurrentSession().get(User.class,id);
 }
 public void deleteUser(int id) {
 User user = getUser(id);
 if (user!=null)
 getCurrentSession().delete(user);
 }
 public List<User> getUsers() {
 return getCurrentSession().createQuery("FROM User").list();
 }
}

UserController:

package com.sprhib.controller;
import java.util.List;
import com.sprhib.model.User;
import com.sprhib.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value="/user")
public class UserController {
 @Autowired
 private UserService userService;
 @RequestMapping(value="/add", method=RequestMethod.GET)
 public ModelAndView addUserPage()
 {
 ModelAndView modelAndView = new ModelAndView("add-user-form");
 modelAndView.addObject("user",new User());
 return modelAndView;
 }
 @RequestMapping(value="/add", method=RequestMethod.POST)
 public ModelAndView addingUser(@ModelAttribute User user) {
 ModelAndView modelAndView = new ModelAndView("home");
 userService.addUser(user);
 String message = "User was successfully added.";
 modelAndView.addObject("message", message);
 return modelAndView;
 }
 @RequestMapping(value="/list")
 public ModelAndView listOfUsers() {
 ModelAndView modelAndView = new ModelAndView("list-of-users");
 List<User> users = userService.getUsers();
 modelAndView.addObject("users", users);
 return modelAndView;
 }
 @RequestMapping(value="/edit/{id}", method=RequestMethod.GET)
 public ModelAndView editUserPage(@PathVariable Integer id) {
 ModelAndView modelAndView = new ModelAndView("edit-user-form");
 User user = userService.getUser(id);
 modelAndView.addObject("user",user);
 return modelAndView;
 }
 @RequestMapping(value="/edit/{id}", method=RequestMethod.POST)
 public ModelAndView edditingUser(@ModelAttribute User user, @PathVariable Integer id) {
 ModelAndView modelAndView = new ModelAndView("home");
 userService.updateUser(user);
 String message = "User was successfully updated.";
 modelAndView.addObject("message", message);
 return modelAndView;
 }
 @RequestMapping(value="/delete/{id}", method=RequestMethod.GET)
 public ModelAndView deleteUser(@PathVariable Integer id) {
 ModelAndView modelAndView = new ModelAndView("home");
 userService.deleteUser(id);
 String message = "User was successfully deleted.";
 modelAndView.addObject("message", message);
 return modelAndView;
 }
}

application.properties:

#DB properties:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test
db.username=root
db.password=root
#Hibernate Configuration:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
entitymanager.packages.to.scan=com.sprhib.model

When i try to get users in a browser:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext

type Exception report

message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext

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 org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:977) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:544) org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:463) org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) com.sun.proxy.$Proxy34.getUsers(Unknown Source) com.sprhib.controller.UserController.listOfUsers(UserController.java:44) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:497) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext org.springframework.orm.hibernate4.HibernateTransactionManager.isSameConnectionForEntireSession(HibernateTransactionManager.java:711) org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:445) org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:463) org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) com.sun.proxy.$Proxy34.getUsers(Unknown Source) com.sprhib.controller.UserController.listOfUsers(UserController.java:44) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:497) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.ClassNotFoundException: org.hibernate.engine.transaction.spi.TransactionContext org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142) org.springframework.orm.hibernate4.HibernateTransactionManager.isSameConnectionForEntireSession(HibernateTransactionManager.java:711) org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:445) org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:463) org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) com.sun.proxy.$Proxy34.getUsers(Unknown Source) com.sprhib.controller.UserController.listOfUsers(UserController.java:44) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:497) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

I'am traning to this example...

asked Feb 16, 2016 at 17:48
1
  • What hibernate version are you using? Commented Feb 16, 2016 at 17:51

1 Answer 1

27

You use org.springframework.orm.hibernate4.HibernateTransactionManager for Hibernate 4. This class using TransactionContext from Hibernate 4.

Looks like you use Hibernate 5. Just change

import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;

to this

import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;

You need to use corresponding Spring libraries of course. For an example 4.2.4.RELEASE.

answered Feb 16, 2016 at 18:17
Sign up to request clarification or add additional context in comments.

4 Comments

import org.springframework.orm.hibernate5 - can't find class ((
import org.springframework.orm.hibernate5 - can't find class. I am set Hibernate version in pom.xml to 4.2.0.Final and errors was changed to another ))). Now hebrnate can't find collums in my table... this is progress fo me )))
@LexValyaev I update my answer. Better to change Spring version. Try to use hibernate.hbm2ddl.auto=create to delete and create all database tables.
This is common mistake when developers are upgrading from hibernate 4 to 5. I ran into same problem when I was upgrading from hibernate 4 to 5. Nice solution @v.ladynev BTW :)

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.