Hibernate 4 - 服务和注入构造函数值

问题描述 投票:2回答:1

我很难看到如何覆盖Hibernate提供的默认Services类并注入特定的构造函数值。例如,我将hibernate.jdbc.batch.builder设置为我自己的类的值,但这意味着该类采用no-param构造函数。如果我想在构造函数中提供默认批量大小,该怎么办? BatchBuilder的服务初始化(它只是批量构建器的工厂)能够做到这一点。我是否需要覆盖默认服务启动器(如果是这样?)或者是否有另一种方法可以定制我自己的服务实现?

java hibernate
1个回答
0
投票

要创建我自己的服务,我使用了这个:

public SessionFactory buildSessionFactory(org.hibernate.cfg.Configuration cfg) throws HibernateException {

    Environment.verifyProperties(cfg.getProperties());
    ConfigurationHelper.resolvePlaceHolders(cfg.getProperties());
    StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();

    Service myBatchBuilder = new BatchBuilderImpl() {
         // Overwrite default values here
    };
    standardServiceRegistryBuilder.addService(BatchBuilder.class, myBatchBuilder);
    final ServiceRegistry serviceRegistry =
            standardServiceRegistryBuilder
                    .applySettings(cfg.getProperties())
                    .build();

    return cfg.buildSessionFactory(serviceRegistry);
}

但是,要在运行时设置批处理大小,它更容易使用:

    BatchBuilderImpl service = (BatchBuilderImpl) getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService(BatchBuilder.class);
    service.setJdbcBatchSize(batchSize);

请注意,您必须创建新会话,以使新批量大小生效。

© www.soinside.com 2019 - 2024. All rights reserved.