我正在尝试使用spring-boot设置hibernate但是我在启动时遇到了以下错误:
java.lang.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_60]
at java.lang.ClassLoader.defineClass(ClassLoader.java:760) ~[na:1.8.0_60]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_60]
我的启动代码
@SpringBootApplication
@EnableTransactionManagement
public class Application extends SpringBootServletInitializer {
static Logger log = Logger.getLogger(Application.class.getName());
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
@PostConstruct
public void test() {
//nothing atm.
}
}
application.properties
spring.datasource.url= {working_url}
spring.datasource.username={usr}
spring.datasource.password={pass}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
依赖
我环顾互联网并找到了一些有相同问题的帖子,但解决方案没有帮助。
任何人都有任何想法?
答案 0 :(得分:0)
通过在application.properties文件中更改此行来解决此问题
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext
到
spring.jpa.properties.hibernate.current_session_context_class=thread
但是M. Deinum提出了一个很好的观点,所以我把它改成了
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
(遗漏了属性引发的错误:org.hibernate.HibernateException:没有配置CurrentSessionContext!)
任何人都可以解释它是如何以及为什么它应该是第三种选择? :)
我的交易现在100%由Spring管理吗? 会话如下所示。
@Autowired
public CarpoolDOA(SessionFactory sf) {
this.sf=sf;
}