Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate 4-服务和注入构造函数值_Java_Hibernate - Fatal编程技术网

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

Java Hibernate 4-服务和注入构造函数值,java,hibernate,Java,Hibernate,我很难理解如何覆盖Hibernate提供的默认服务类并注入特定的构造函数值。例如,我将hibernate.jdbc.batch.builder设置为我自己的类的值,但这意味着该类不接受参数构造函数。如果我想在构造函数中提供一个默认的批量大小,该怎么办?BatchBuilder的服务启动器(它只是一个批量生成器工厂)能够做到这一点。我是否需要覆盖默认服务启动器(如果需要,如何覆盖?),或者是否有其他方法可以定制我自己的服务实现?要创建我自己的服务,我使用以下方法: public SessionFa

我很难理解如何覆盖Hibernate提供的默认服务类并注入特定的构造函数值。例如,我将
hibernate.jdbc.batch.builder
设置为我自己的类的值,但这意味着该类不接受参数构造函数。如果我想在构造函数中提供一个默认的批量大小,该怎么办?BatchBuilder的服务启动器(它只是一个批量生成器工厂)能够做到这一点。我是否需要覆盖默认服务启动器(如果需要,如何覆盖?),或者是否有其他方法可以定制我自己的服务实现?

要创建我自己的服务,我使用以下方法:

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);
请注意,您必须创建一个新会话,以便新的批处理大小生效