我正在努力了解如何覆盖 Hibernate 提供的默认服务类并注入特定的构造函数值。例如,我设置hibernate.jdbc.batch.builder
为我自己的类的值,但这意味着该类采用无参数构造函数。如果我想在构造函数中提供默认批量大小怎么办?BatchBuilder 的服务启动器(它只是一个批处理构建器的工厂)能够做到这一点。我是否需要覆盖默认的服务启动器(如果需要怎么办?)还是有其他方法可以定制我自己的服务实现?
问问题
172 次
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);
请注意,您必须创建一个新会话才能使新的批量大小生效。
于 2018-02-28T10:39:46.003 回答