У меня есть проект JPA mvc, который выдает эту ошибку. Это базовое приложение c crud, использующее EntityManager из JPA.
Hibernate: select user0_.user_id as user_id1_0_, user0_.display_picture as display_2_0_, user0_.email as email3_0_, user0_.enabled as enabled4_0_, user0_.first_name as first_na5_0_, user0_.forgot_password as forgot_p6_0_, user0_.last_name as last_nam7_0_, user0_.password as password8_0_, user0_.role as role9_0_ from users user0_
Feb 28, 2020 1:23:56 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 08001
Feb 28, 2020 1:23:56 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Could not create connection to database server.
Feb 28, 2020 1:23:56 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/cesc] threw exception [Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection] with root cause
java.lang.NullPointerException
Я предполагаю, что соединение установлено, потому что генерируется запрос Hibernate. Но я все еще не уверен. Я импортировал все необходимые файлы JAR с весенней версией 4.2.4
Вот мой код
UserDaoImpl
@Component
@Transactional(value = "txManager")
public class UserDaoImpl implements UserDao{
@PersistenceContext
EntityManager em;
@Override
public User getUser(String paramUser) {
// TODO Auto-generated method stub
User user = em.find(User.class, paramUser);
return user;
}
@Override
public void updateDP(String username) {
// TODO Auto-generated method stub
User user = em.find(User.class, username);
user.setDisplay_picture("resources/images/admin/" + username + ".jpg");
em.persist(user);
}
@Override
public String updateUser(User paramUser, String origName) {
// TODO Auto-generated method stub
if(!(StringUtils.isEmpty(paramUser.getFirst_name()) && StringUtils.isEmpty(paramUser.getLast_name()) &&
StringUtils.isEmpty(paramUser.getPassword()) && StringUtils.isEmpty(paramUser.getRole()))) {
User user = em.find(User.class, origName);
user.setFirst_name(paramUser.getFirst_name());
user.setLast_name(paramUser.getLast_name());
user.setPassword(paramUser.getPassword());
user.setRole(paramUser.getRole());
user.setEmail(paramUser.getEmail());
user.setDisplay_picture(paramUser.getDisplay_picture());
user.setEnabled(true);
user.setForgot_password(0);
em.persist(user);
return "success";
}
else
return "error";
}
@Override
public String insertUser(User paramUser) {
// TODO Auto-generated method stub
em.persist(paramUser);
return "success";
}
@Override
public List<User> getAllUsers() {
// TODO Auto-generated method stub
Query query = em.createQuery("select u from User u");
List<User> users = query.getResultList();
return users;
}
@Override
public String deleteUser(User paramUser) {
// TODO Auto-generated method stub
User user = em.find(User.class, paramUser.getUser_id());
user.setEnabled(false);
em.persist(user);
return "Success";
}
@Override
public boolean updateForgottenPassword(User paramUser) {
// TODO Auto-generated method stub
User user = em.find(User.class, paramUser.getUser_id());
user.setPassword(paramUser.getPassword());
user.setForgot_password(1);
em.persist(paramUser);
return true;
}
}
Контроллер
@RestController
public class LoginController {
@Autowired
private UserDao dao;
@RequestMapping(value="/welcome")
public void test() {
System.out.println(dao.getAllUsers());
}
}
application- config
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:com/cesc/resources/database_conn.properties</value> <!-- class path is requried when runing from web app -->
</property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<!-- To Enable JPA Repository and to refer to the custom transaction Manager name-->
<jpa:repositories base-package="com.cesc.dao com.cesc.dao.impl" transaction-manager-ref="txManager"> </jpa:repositories>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${user_db_driver}" />
<property name="url" value="${user_db_url}" />
<property name="username" value="${user_user}" />
<property name="password" value="${user_password}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
<property name="packagesToScan" value="com.cesc.entity"></property>
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <!-- custom transaction Manager -->
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
</beans>