我正在努力解决我的应用程序提供给用户的复制功能的性能问题。我不确定我会以正确的方式去做。我在 Hibernate 方面没有太多经验。
过度简化的布局将是:
Project ---> (One to Many) Items ---> (One to Many) Tasks
Project ---> (One to Many) Variables
Items <---> Variables (Many to Many)
所以,一个项目可以有很多项目,每个项目可以有很多任务。一个项目可以有变量(没有重复),并且项目和变量之间存在多对多(它们相互连接)。
每个项目可能有几百个项目,每个项目有几个(20-30)个任务,每个项目有几百个变量。我添加了一个功能,允许用户检查他们想要从一个项目复制到另一个项目的项目和任务。不能有任何重复。
这是我为每个检查项目执行的过程:
- 检查目标项目中是否存在该项目,如果存在则添加,否则不添加。我使用 session.createFilter 来查询目标项目(按项目名称)。如果该项目不存在,我添加它。(
object.save()
),并将其添加到目标项目的项目集合中。 - 如果项目附加了变量,我检查目标项目中的这些变量(再次
session.createFilter()
),如果不存在则添加它们,然后将它们添加到 item.variables 集合
我不确定我能做些什么来加快速度。我假设先做所有检查并没有帮助。我不知道 createFilter 是否是检查目标项目中是否存在项目/变量的最佳方法。
我尝试改变将对象添加到集合中的方式。targetProject.add(item)
我会一次添加一个targetProject.addAll(items)
(不过,我看不出有什么区别。
有没有更好的方法来做到这一点?我使用 Ehcache 作为二级缓存。我还在 Hibernate 3.2.5 上。
任何帮助表示赞赏。