我有一个班级,位置。 Location包含一个BorderPoint对象列表,但它可以是一个巨大的列表(20,000不是不可能的)。这个表是LOCATION和BORDERPOINT。
我最初通过从ESRI Shapefile导入来填充Location。这是一段代码片段:
try {
while (featureIterator.hasNext()) {
Location location = new Location();
SimpleFeatureImpl feature = (SimpleFeatureImpl) featureIterator.next();
// set the information in location based on stuff in the feature, lets me clean up this
// method a bit
setLocationInfo(location, feature);
List<BorderPoint> borderPointList = getBorderPoints(feature, location);
//saveBorderPoints(location, feature);
location.setBorderPointList(borderPointList);
try {
locationRepository.persist(location);
} catch (RepositoryException e) {
throw new ServiceException("processShapefile() threw RepositoryException", e);
}
}
} finally {
featureIterator.close();
}
由于List中有如此多的BorderPoint对象,但我只是通过调用Location对象上的persist来保存它们,我是否可以自动设置某种批量大小来保存BorderPoints?
答案 0 :(得分:2)
我不知道OpenJPA,但我已经使用了很多Hibernate。您可能必须自己控制事务大小。如果您稍微更改代码,这应该很简单:
答案 1 :(得分:1)
如果您使用JTA,您可能必须自己将导入分为批次。但是,您可能想要检查是否确实必须将每个点存储为一行。
我的同事试图保存一个有很多分数的图表,在获得不良表现后,他们分析了使用情况并意识到他们总是加载所有点数。因此,他们最终将所有点序列化为一个blob,并且性能提升很大。