GVKun编程网logo

Spring Boot / Thymeleaf / Hibernate:带有Java注释的Sessionfactory Bean(java spring常用注解)

12

在这篇文章中,我们将带领您了解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常用注解)

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>

干杯

解:

  1. 我需要如下所述添加豆类

  2. 我必须添加

org.springframework spring-orm 4.3.10.RELEASE到我的pom.xml

  1. 在@SpringBootApplication之后,我必须添加

@EnableAutoConfiguration(排除= {HibernateJpaAutoConfiguration.class})

答案1

小编典典

由于您使用的是Spring
Boot,因此应该对数据库配置使用不使用XML的配置。spring启动与Hibernate,您需要创建整合LocalSessionFactoryBeanDataSourceHibernateTransactionManagerPersistenceExceptionTranslationPostProcessor豆是这样的:

@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 配置

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

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

java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory

我正在尝试使用 spring 3.2和hibernate 4创建sessionFactory bean.我使用了以下代码.但问题是不推荐使用buildSessionFactory(),建议在 javadoc中使用buildSessionFactory(ServiceRegistry serviceRegistry).但是,我无法理解什么是ServiceRegistry以及如何使用buildSessionFactory(ServiceRegistry serviceRegistry).
@Configuration
public class AppConfig {

    ...


    @Bean
    public SessionFactory sessionFactory() {
    return new LocalSessionFactoryBuilder(dataSource())
        .scanPackages("com.mypackages")
        .addProperties(hibernateProperties())
        
  

  
   
  .buildSessionFactory(); 

  

    }
}

解决方法

ServiceRegistry接口与服务概念相关(这是Hibernate 4的新特性).服务是为Hibernate提供各种功能的类,用户可以为其插入替代实现.有关详情,请参见 this wiki page.

你是对的,在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

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 Beanjava spring常用注解的分享已经告一段落,感谢您的关注,如果您想了解更多关于hibernate +spring sessionfactory 配置、Hibernate HibernateSessionFactory.java、java – 使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory、java – 没有类型[org.hibernate.SessionFactory]的限定bean的相关信息,请在本站查询。

本文标签: