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

JAVAlang.NullPointerException调用数据源[duplicate]

南门鸿振
2023-03-14

我有一个库模块,我想用它来存储Hibernate模型。我要一个我想用的春战套餐。

主要的Spring战争:

@Configuration
@EnableTransactionManagement
public class ContextDatasource {

    @Bean
    public LocalSessionFactoryBean sessionFactory() throws NamingException {
        final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "org.plugin.database.models" });
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() throws NamingException {
        return (DataSource) new JndiTemplate().lookup("java:/global/production_gateway");
    }

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

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

    private final Properties hibernateProperties() {
        final Properties hibernateProperties = new Properties();
        return hibernateProperties;
    }
}

图书馆道:

public class BlacklistsDaoHibernate implements BlacklistsDao {

    Session session;

    @Autowired
    SessionFactory sessionFactory;

    public BlacklistsDaoHibernate() {
        session = sessionFactory.getCurrentSession();
    }

    @Override
    public void saveOrUpdate(BlacklistsModel blacklistsModel) throws Exception {
        try {
            session.getTransaction().begin();
            session.saveOrUpdate(blacklistsModel);
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
            throw new Exception("Error");
        }
    }

但是我在这一行中得到了NPEsession=sessionFactory。getCurrentSession()

在库Jar模块中使用sessionFactory的正确方法是什么?


共有1个答案

万修然
2023-03-14

您可以使用@PostConconfit或构造函数注入。Spring实例化您的对象,然后解析它的@Autowung字段。您可以要求它在通过构造函数注入实例化对象之前解析您的对象的依赖关系。

使用构造函数注入:

SessionFactory sessionFactory;
Session session;
public BlacklistsDaoHibernate(@Autowired SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
    this.session = sessionFactory.getCurrentSession();
}

用@PostConconfit:

@Autowired
SessionFactory sessionFactory;
Session session;

@PostConstruct
void init() {
    this.session = sessionFactory.getCurrentSession();
}

编辑:如果您的目标只是解决注释中提到的NullPointerExctive,请使用以下代码:

@PostConstruct
void init() {
    this.session = sessionFactory.openSession();
}

下面是一个典型的SessionFactory用法示例https://www.java2novice.com/hibernate/session-factory.

 类似资料:
  • 定义 SHOW RESOURCES [FROM schemaName] 说明 列 说明 name 数据源名称 type 数据源类型 host 数据源地址 port 数据源端口 db 数据库名称 attribute 数据源参数 示例 mysql> show resources; +------+-------+-----------+------+------+----------------

  • 定义 ADD RESOURCE dataSource [, dataSource] ... ALTER RESOURCE dataSource [, dataSource] ... dataSource: simpleSource | urlSource simpleSource: dataSourceName(HOST=hostName,PORT=port,DB=dbNam

  • Spark SQL支持通过SchemaRDD接口操作各种数据源。一个SchemaRDD能够作为一个一般的RDD被操作,也可以被注册为一个临时的表。注册一个SchemaRDD为一个表就 可以允许你在其数据上运行SQL查询。这节描述了加载数据为SchemaRDD的多种方法。 RDDs parquet文件 JSON数据集 Hive表

  • 一、简介 如果需要调用本系统之外的数据库,可以通过数据源管理来保存数据库服务器配置信息,调用的时候通过数据源调用代码可以进行调用了。 二、功能演示 1.添加数据源 数据源调用配置有二种方法: A,模型配置调用: 选择模型,并选择对应模型提供的操作(模型提供的操作,请查阅 模型标签 帮助) B,自定义SQL: 2.数据源管理 数据源修改和删除管理。如下图: 3.外部数据源 A,添加外部数据源: B,

  • 到目前为止,我们在使用QueryRunner时使用了连接对象。 我们也可以无缝地使用数据源。 以下示例将演示如何在QueryRunner和数据源的帮助下使用Read查询读取记录。 我们将从Employees Table中读取记录。 语法 (Syntax) QueryRunner queryRunner = new QueryRunner( dataSource ); Employee emp =

  • 我试图通过使用简单的json数据源调用SpringRESTAPI来生成grafana仪表板。实现了启用简单json数据源所需的所有API(/、/search、/query),并按照grafana simple json数据源的预期维护了合同。 此外,还添加了CORS作为响应头的一部分,甚至通过在****@RestController**添加@CrossOrigin来启用请求API的CORS。 当我