在这篇文章中,我们将带领您了解SpringBoot/Thymeleaf/Hibernate:带有Java注释的SessionfactoryBean的全貌,包括javaspring常用注解的相关情况。同
在这篇文章中,我们将带领您了解Spring Boot / Thymeleaf / Hibernate:带有Java注释的Sessionfactory Bean的全貌,包括java spring常用注解的相关情况。同时,我们还将为您介绍有关hibernate +spring sessionfactory 配置、Hibernate HibernateSessionFactory.java、java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory、java – 没有类型[org.hibernate.SessionFactory]的限定bean的知识,以帮助您更好地理解这个主题。
本文目录一览:- Spring Boot / Thymeleaf / Hibernate:带有Java注释的Sessionfactory Bean(java spring常用注解)
- hibernate +spring sessionfactory 配置
- Hibernate HibernateSessionFactory.java
- java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory
- java – 没有类型[org.hibernate.SessionFactory]的限定bean
Spring Boot / Thymeleaf / Hibernate:带有Java注释的Sessionfactory Bean(java spring常用注解)
我已经使用Thymeleaf和Hibernate用IntelliJ创建了Spring Boot
Web应用程序。到目前为止,我可以创建所有的数据库连接,并且工作正常。据我所知,将Sessionfactory作为bean并在执行db操作的所有服务类中将其自动装配是一个好方法。
我有一个SpringMvcConfiguration作为配置文件,如下所示:
package eu.barz.familykurse.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.LocaleResolver;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;import org.springframework.web.servlet.i18n.SessionLocaleResolver;import java.util.Locale;@Configurationpublic class SpringMvcConfiguration extends WebMvcConfigurerAdapter{ @Bean public LocaleResolver localeResolver(){ SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver(); sessionLocaleResolver.setDefaultLocale(Locale.GERMAN); return sessionLocaleResolver; } @Bean LocaleChangeInterceptor localeChangeInterceptor(){ LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); return localeChangeInterceptor; } @Override public void addInterceptors(InterceptorRegistry interceptorRegistry){ interceptorRegistry.addInterceptor(localeChangeInterceptor()); }}
问题:我已经尝试了很多,但是找不到为SessionFactory声明bean的解决方案。
任何提示将非常有帮助。我应该在这里声明一个sessionfactory和数据源,还是必须在application.properties或仅在hibernate.cfg.xml中声明(当前看起来像这样):
<?xml version=''1.0'' encoding=''utf-8''?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <property name="connection.url">jdbc:mysql://localhost:3306/family_kurse</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">username</property> <property name="connection.password">secret</property> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="hibernate.current_session_context_class">thread</property> <property name="show_sql">true</property> <mapping/> <mapping/> <!-- DB schema will be updated if needed --> <!-- <property name="hbm2ddl.auto">update</property> --> </session-factory></hibernate-configuration>
干杯
解:
我需要如下所述添加豆类
我必须添加
org.springframework spring-orm 4.3.10.RELEASE到我的pom.xml
- 在@SpringBootApplication之后,我必须添加
@EnableAutoConfiguration(排除= {HibernateJpaAutoConfiguration.class})
答案1
小编典典由于您使用的是Spring
Boot,因此应该对数据库配置使用不使用XML的配置。spring启动与Hibernate,您需要创建整合LocalSessionFactoryBean
,DataSource
,HibernateTransactionManager
和PersistenceExceptionTranslationPostProcessor
豆是这样的:
@Configurationpublic class DatabaseConfig { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan("com.example.model"); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); dataSource.setUrl("jdbc:postgresql://localhost:5432/testdb"); dataSource.setUsername("root"); dataSource.setPassword("root"); return dataSource; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(sessionFactory); return txManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { return new PersistenceExceptionTranslationPostProcessor(); } Properties hibernateProperties() { Properties properties = new Properties(); properties.setProperty("hibernate.ddl-auto", "update"); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect"); return properties; }}
在上面的数据库配置中,我使用了postgreSQL数据库。
要获得sessionFactory自动装配SessionFactory
接口的实例,如下所示:
@Autowired SessionFactory sessionFactory;
hibernate +spring sessionfactory 配置
<bean id="sessionFactory">
<property name="dataSource" ref="dataSource"></property>
<!--<property name="configLocation" value="hibernate.cfg.xml"></property>--> (3)
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
<property name="packagesToScan" value="xxx.xxx" />
</bean>
上面的就是 hibernate 的 sessionfactory 的配置,其中最下面的 </property>
<property name="packagesToScan" value="xxx.xxx" />
就是告诉 hibernate 在 xxx.xxx 这个包下去搜索注释生成数据库表
如果用(3)的配置就需要 hibernate.cfg.xml
Hibernate HibernateSessionFactory.java
使用MyEclipse建立Hibernate时自动产生一个HibernateSessionFactory.java文件,这个文件有必要么
我的代码:
Configuration cfg = new Configuration(); cfg.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.getCurrentSession();
java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory
@Configuration public class AppConfig { ... @Bean public SessionFactory sessionFactory() { return new LocalSessionFactoryBuilder(dataSource()) .scanPackages("com.mypackages") .addProperties(hibernateProperties()).buildSessionFactory();} }
解决方法
你是对的,在Hibernate的Configuration类中不推荐使用方法buildSessionFactory(),而使用方法buildSessionFactory(ServiceRegistry serviceRegistry).在纯Hibernate的环境中(没有Spring),假设您将以这样的方式初始化ServiceRegistry的实例:
private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; private static SessionFactory configureSessionFactory() throws HibernateException { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); return sessionFactory; }
但到目前为止,不推荐使用的方法buildSessionFactory()也为您执行相同的ServiceRegistry初始化.
Spring的LocalSessionFactoryBuilder类只是Hibernate的Configuration类的扩展.但是由于Spring的所有特定工作都是在重载方法LocalSessionFactoryBuilder.buildSessionFactory()中完成的,所以在Spring的环境中不能使用方法buildSessionFactory(ServiceRegistry serviceRegistry).没什么用的,因为使用buildSessionFactory()完成同样的工作是可以的.因此,让我们使用@SuppressWarnings(“弃用”)在AppConfig中注释该方法,并耐心等待Spring提供与Hibernate 4的更好集成.
java – 没有类型[org.hibernate.SessionFactory]的限定bean
嗨,我看到很多人都有这种类型的问题,但答案对我没有帮助
这是我的错误:我认为我必须为sesssionFactory创建bean,但我在你的上下文文件中看到了它.这是春天,冬眠和角度项目mayby角度是一个问题?请帮忙
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies Failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.job.service.Newsletter.NewsletterService com.job.controller.HomeController.newsletterService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'newsletterService': Injection of autowired dependencies Failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.job.dao.Newsletter.NewsletterDAO com.job.service.Newsletter.NewsletterServiceImpl.newsletterDAO; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'newsletterDAOImpl': Injection of autowired dependencies Failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.job.dao.Newsletter.NewsletterDAOImpl.sessionFactory; nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcesspropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1202)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:476)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getobject(Abstractbeanfactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:299)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:194)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.preInstantiateSingletons(DefaultListablebeanfactory.java:755)
at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextinitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1618)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.Mbeanfactory.createStandardContext(Mbeanfactory.java:463)
at org.apache.catalina.mbeans.Mbeanfactory.createStandardContext(Mbeanfactory.java:413)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$2.run(Transport.java:202)
at sun.rmi.transport.Transport$2.run(Transport.java:199)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:198)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:567)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.access$400(TCPTransport.java:619)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$1.run(TCPTransport.java:684)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$1.run(TCPTransport.java:681)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:681)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
和DAO
@Repository
public class NewsletterDAOImpl implements NewsletterDAO,Serializable {
@Autowired(required = true)
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public Newsletter addUser(Newsletter user) {
getSessionFactory().getCurrentSession().save(user);
return user;
}
}
和服务
@Service("newsletterService")
public class NewsletterServiceImpl implements NewsletterService {
@Autowired
private NewsletterDAO newsletterDAO;
@Override
@Transactional(readOnly = false)
public Newsletter addUser(Newsletter user) {
newsletterDAO.addUser(user);
return user;
}
}
和控制器
@Controller
public class HomeController {
@Autowired
private NewsletterService newsletterService;
@RequestMapping("/home")
public String hello(@RequestParam(value="name",required=false,defaultValue="World") String name,Model model) {
model.addAttribute("name",name);
return "home";
}
@RequestMapping(value = "/home",method = RequestMethod.POST)
@ResponseBody
public void addPerson(@RequestBody Newsletter newsletter) {
newsletterService.addUser(newsletter);
}
}
和上下文
spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
factorybean">
figurer">
sspath:jdbc.properties"/>
fig />
sql.Driver" />
sql://localhost:5432/postgres" />
文件:
POM
sqlsqlcope>testcope>
spring-ormcope>compilecope>
modelmappermodelmapperjackson-databind
最佳答案
我在web.xml double< context-param>中遇到错误.
我们今天的关于Spring Boot / Thymeleaf / Hibernate:带有Java注释的Sessionfactory Bean和java spring常用注解的分享已经告一段落,感谢您的关注,如果您想了解更多关于hibernate +spring sessionfactory 配置、Hibernate HibernateSessionFactory.java、java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory、java – 没有类型[org.hibernate.SessionFactory]的限定bean的相关信息,请在本站查询。
本文标签: