Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 OpenJPA中的自动事务_Java_Openjpa - Fatal编程技术网

Java OpenJPA中的自动事务

Java OpenJPA中的自动事务,java,openjpa,Java,Openjpa,我有一个班级,地点。位置包含一个边界点对象列表,但它可以是一个巨大的列表(20000个并非不可能)。这方面的表格是位置和边界点 我最初通过从ESRI形状文件导入来填充位置。这里有一个代码片段: try { while (featureIterator.hasNext()) { Location location = new Location(); SimpleFeatureImpl feat

我有一个班级,地点。位置包含一个边界点对象列表,但它可以是一个巨大的列表(20000个并非不可能)。这方面的表格是位置和边界点

我最初通过从ESRI形状文件导入来填充位置。这里有一个代码片段:

        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();
        }
试试看{
while(featureIterator.hasNext()){
位置=新位置();
SimpleFeatureImpl feature=(SimpleFeatureImpl)featureIterator.next();
//根据功能中的内容在位置中设置信息,让我来清理一下
//方法一点
setLocationInfo(位置、特征);
List borderPointList=getBorderPoints(特征、位置);
//保存边界点(位置、特征);
location.setBorderPointList(borderPointList);
试一试{
locationRepository.persist(位置);
}捕获(存储异常e){
抛出新的ServiceException(“processShapefile()抛出了RepositoryException”,e);
}
}
}最后{
featureIterator.close();
}

由于列表中有这么多边界点对象,但我只是通过调用Location对象上的persist来保存它们,我是否可以自动设置某种类型的批大小来持久化边界点?

如果使用JTA,您可能需要自己将导入分解成批。但是,您可能需要检查是否确实必须将每个点存储为一行


我的同事试图保存一个包含许多点的图表,在性能不佳后,他们分析了使用情况,意识到他们总是加载所有点。因此,他们最终将所有点序列化为一个blob,性能得到了巨大的提高。

我不知道OpenJPA,但我经常使用Hibernate。您可能必须自己控制事务大小。如果您稍微更改代码,这应该很容易:

  • 创建并保存位置。您可能还应该提交数据库事务
  • 将边界点保留到数据库中,确保已设置其父位置。这意味着父位置映射到边界点上。您可能希望每隔100个边界点左右提交一次
  • 从数据库中查询位置并访问其边界点。所有持久化的边界点都应该在那里

  • 这就是我所担心的答案,但我一直抱着希望。我自己在Hibernate方面也有一些经验,它似乎比JPA更易于配置,尤其是在Spring下。