2010-09-21 70 views
2

我有一个非常大的对象树结构,我坚持使用Hibernate。这应该先保留在根节点,然后是孩子等。然而,这不是Hibernate所做的方式,它首先坚持孩子,并且在父母被持续时更新孩子中的参考列。这不是一个最佳的方式,所以我强制一对多(JoinColum)不为null(空值= false)。一对多的休眠持久性很慢

现在事实证明,一切都变得更慢,速度要慢得多。我不明白?!

+0

我不认为有足够的细节得到任何答案。 – 2010-09-21 17:11:47

+0

我知道细节水平很低。然而,我还没有那么多,并正在努力。因此,如果我在所有“一对多”和“多对一”关系中都有“可空=假”,则持续时间为30分钟。如果我删除了限制但具有相同的数据,则需要40秒。我还可以补充说,我的对象图中没有循环依赖关系,它是一棵树(关于具有“cascada”的关系)。 – 2010-09-22 12:30:03

+0

该问题与Hibernate插入和更新的方式有关。当使用“nullable = true”(或者什么也没有)时,Hibernate会跳过插入的外键列,然后用更新语句更新它。但是,如果“nullable = false”,则外键将插入到插入中,但值不正确,然后由更新语句更新?!这是非常低效的,而且我真的很想解决这个问题(为什么PostgreSQL上的这种差异是我仍然不明白的?)。 – 2010-09-22 13:13:28

回答

1

如果是双向关联,则需要将一端映射为反转(如果使用注释,则将xml中的反转属性映射到mappedBy)。