当前位置: 首页 > 知识库问答 >
问题:

基于Hibernate SessionFactory注释的配置

白君之
2023-03-14

我最近的目标是构建一个Spring Boot应用程序,但不需要任何XML配置文件(或尽可能少),因此我希望避免使用一些XML文件(即web.XML),特别是对于一些bean定义部分。

更难的部分来了。

我想使用@AutoWired注释将一个SessionFactory bean注入到类中,但每次尝试启动应用程序时,我都得到:

unsatisfiedDependencyException:创建名为“temperature controller”的bean时出错:通过字段“session factory”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.beanCreationException:创建名称为“session factory”的bean时出错:FactoryBean在创建对象时引发异常;嵌套异常为java.lang.IllegalStateException:EntityManagerFactory不能为空

好的,我理解Spring没有SessionFactory bean,因为它没有EntityManagerFactory。

因此,我将非常感谢任何关于如何解决这一问题的建议,但仅限于通过注解进行配置。

到目前为止,我读到了与我类似的关于在@Configuration class中指定一个bean的帖子:

@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
    return new HibernateJpaSessionFactoryBean();
}

然后将这一行添加到属性文件中:

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.springsessioncontext

spring.jpa.show-sql=true spring.datasource.password=mysql spring.datasource.testwhileidle=true spring.jpa.hibernate.ddl-auto=update spring.datasource.validationquery=SELECT 1 spring.datasource.url=jdbc:mysql://localhost:3306/sys spring.jpa.properties.hibernate.dialect.mysql5dialect.spring.jpa.hibernate.naming-strategy=org.hibernate.dialties.cfg.improvednamingstrategy spring.datasource.ddl_context_class=org.springframework.orm.hibernate4.springsessioncontext

共有1个答案

吕承望
2023-03-14

通常,当我想定义一些简单的东西时,我会创建一个类似于以下内容的类:

@Configuration
@EnableTransactionManagement
public class PersistanceJpaConfig {

    @Bean 
    public LocalSessionFactoryBean hibernateSessionFactory(DataSource dataSource) {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setPackagesToScan(new String[] { 
                  "my.entities.package" 
        });
        sessionFactory.setHibernateProperties(additionalProperties());

        return sessionFactory;
    }

    @Bean HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory);

        return transactionManager;
    }

   @Bean 
   public DataSource dataSource(){
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://localhost:3306");
      dataSource.setUsername("user");
      dataSource.setPassword("password");
      return dataSource;
   }

    Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57InnoDBDialect");
        return properties;
    }

}

通过使用@enabletransactionmanagement并创建一个LocalSessionFactoryBean类型的bean,spring将自动为您创建一个SessionFactorybean,您可以在任何地方注入/自动连接。

当然,如果需要,您可以从属性文件中注入一些配置。

 类似资料:
  • 问题内容: 在最近我从事的一些大型项目中,选择其中一种(XML或注释)似乎变得越来越重要。随着项目的发展,一致性对于可维护性非常重要。 我的问题是:与基于注释的配置相比,基于XML的配置有哪些优势?与基于XML的配置相比,基于注释的配置有哪些优势? 问题答案: 注释有其用途,但它们不是杀死XML配置的灵丹妙药。我建议将两者混合! 例如,如果使用Spring,则将XML用于应用程序的依赖注入部分是完

  • 我最近在使用作为Spring Boot applications(v2.2)开发的微服务,在我的公司,我们使用Keycloak作为授权服务器。我们之所以选择它,是因为我们需要复杂的策略、角色和组,我们还需要用户托管授权(UMA)来在用户之间共享资源。 有没有一种方法可以在控制器级别使用某种注释?类似于下面的伪代码:

  • 从Spring 2.5开始,可以使用annotations配置依赖注入。 因此,不是使用XML来描述bean连接,而是可以通过在相关的类,方法或字段声明上使用注释将bean配置移动到组件类本身。 在注入XML之前执行注释注入。 因此,对于通过两种方法连接的属性,后一种配置将覆盖前者。 默认情况下,Spring容器中未打开注释接线。 因此,在我们使用基于注释的布线之前,我们需要在Spring配置文件

  • 当我使用Spring framework时,我经常看到2个术语基于Java和基于注释的配置/自动生成。 如果它们不一样,你能告诉我它们之间有什么不同吗?

  • 问题内容: 最近,在我们的团队中,我们开始讨论在代码中使用spring注释来定义spring依赖关系。当前,我们正在使用context.xml定义依赖项。您能给我一些关于这两种方法的线索吗?何时更好地使用? 编辑:我知道这似乎是对更一般的问题的重复问题,但是我对仅依赖注入的注解和配置的影响感兴趣,我相信与一般问题相比,注解和配置的影响会有所不同。 问题答案: 在阅读了此处的一些相关文章并在团队中进

  • 我是Spring的新手,尝试将基于xml的配置转换为注释basic。我读了这个教程。它与基于xml的配置完美结合。MVCSpring积垢教程 现在我将所有基于xml的配置转换为注释,但我有一个问题。我几乎把我读到的东西都读了一遍,但我没有解决这个问题。 组织。springframework。豆。工厂BeanCreationException:创建名为“personController”的bean时