【问题标题】:How to fix NPE in hibernate config?如何修复休眠配置中的 NPE?
【发布时间】:2020-01-11 02:44:54
【问题描述】:

@Autowired Environment env - 始终为 null。这是我的 HibernateConf.java:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:hibernate.properties" })
public class HibernateConf{

    @Autowired
    private Environment env;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[]{"Enteties"});
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() {
        final BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("com.mysql.cj.jdbc.Driver")));
        dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc:mysql://localhost:3306/tutorialdb?createDatabaseIfNotExist=true")));
        dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("root")));
        dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("9339")));
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager hibernateTransactionManager() {
        final HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }

    private final Properties hibernateProperties() {
        final Properties hibernateProperties = new Properties();
        hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("create-drop"));
        hibernateProperties.setProperty("hibernate.dialect", env.getProperty("org.hibernate.dialect.MySQL5Dialect"));

        return hibernateProperties;
    }
}

所以主要问题是这个@Autowired private Environment env; 总是NPE,但我不知道为什么,因为这个配置类的每个示例都与我的相同。我该如何解决?

【问题讨论】:

  • 您的属性不是属性,而是实际值。
  • 你是什么意思?我该怎么办?
  • 请在此处查看答案:stackoverflow.com/questions/19421092/…
  • 无论如何我需要注入我的环境,我需要在哪里做?
  • 用于从 Environment 导入属性的类

标签: java spring hibernate


【解决方案1】:

(代表问题作者发布,将其从问题移至答案空间)

我找到了解决这个问题的方法。首先,您需要删除 @Autowired private Environment env;,然后将 dataSource.setPassword("9339") 与字符串参数一起使用。

第三,你需要的不是 5.0...mysql-connector 不是 4.0...而是这个:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.17</version>
</dependency> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2010-11-08
    • 2021-10-09
    • 2014-10-04
    • 2015-07-28
    • 2016-05-06
    相关资源
    最近更新 更多