您好我有一个小的Spring Boot设置和访问我的数据库的问题。
这是我从Controller开始的安装程序:
@Controller
@RequestMapping("/myproject/users")
public class UserController {
private static Logger logger = LoggerFactory
.getLogger("UserController.class");
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
....
这是我的DAO他用所有CRUD方法扩展了一个抽象的DAO:
@Repository
@Transactional
public class UserDaoImpl<T> extends AbstractDAO<User, Integer> implements
UserDao {
@Autowired
public UserDaoImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
protected Class<User> getEntityClass() {
return User.class;
}
public User getUserByMail(String email) {
User result = null;
Criteria criteria = getCriteria();
criteria.add(Restrictions.eq("email", email));
if (criteria.uniqueResult() != null) {
result = (User) criteria.uniqueResult();
}
return result;
}
protected final Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
.....
最后服务:
@Component
@Transactional
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public List<User> getAllUsers() {
return this.userDao.findAll();
}
....
以下是我的应用程序设置:
spring.datasource.url=jdbc:mysql://10.0.0.15:3306/schema
spring.datasource.username=test
spring.datasource.password=test
# Hibernate
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
# Tomcat
server.port = 9080
这是我的Application.java:
@Configuration
@ComponentScan({"core", "controller"})
@EnableAutoConfiguration
public class Application
{
public static void main(String[] args) {
....
}
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
return hemf.getSessionFactory();
}
....
我的问题是,Sessionfactory正确构造,所有bean都被加载,但是当我的DAO尝试访问数据库时,我得到一个例外:
&#39; org.hibernate.HibernateException:没有配置CurrentSessionContext&#39;
我非常在Stackoverflow上搜索,发现问题是Spring无法打开CurrentSessionContext。我可以手动执行此操作,但我希望Spring-Boot处理我的事务。有没有人认出我在设置中的错误?
我已经尝试坚持这个解决方案:Stackoverflow
非常感谢!
答案 0 :(得分:5)
将以下内容添加到我的应用程序设置中对我有用:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext