Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 休眠持久性在一对多上运行缓慢_Java_Hibernate_Postgresql_Jpa_Jboss5.x - Fatal编程技术网

Java 休眠持久性在一对多上运行缓慢

Java 休眠持久性在一对多上运行缓慢,java,hibernate,postgresql,jpa,jboss5.x,Java,Hibernate,Postgresql,Jpa,Jboss5.x,我有一个相当大的对象树结构,我用Hibernate保存它。这应该先与根节点保持一致,然后与子节点保持一致,依此类推。然而,Hibernate并不是这样做的,它首先持久化子对象,然后在父对象被持久化时更新子对象中的引用列。这不是一种最佳的方法,因此我强制一对多(joincolm)不为null(nullable=false) 现在一切都变得更慢,慢得多。我不明白 如果是双向关联,则需要将一端映射为反向(xml中的反向属性,如果使用注释,则映射为mappedBy)。我认为没有足够的详细信息来获得任何答

我有一个相当大的对象树结构,我用Hibernate保存它。这应该先与根节点保持一致,然后与子节点保持一致,依此类推。然而,Hibernate并不是这样做的,它首先持久化子对象,然后在父对象被持久化时更新子对象中的引用列。这不是一种最佳的方法,因此我强制一对多(joincolm)不为null(nullable=false)


现在一切都变得更慢,慢得多。我不明白

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

我认为没有足够的详细信息来获得任何答案。我知道详细程度很低。然而,我还没有那么多,正在努力。因此,如果我对所有一对多和多对一关系都有“nullable=false”,那么持久化需要30分钟。如果我删除了合同,但有相同的数据,它需要40秒。我还可以补充一点,我的对象图中没有循环依赖关系,它是一个树(在具有“cascada”的关系上)。问题与Hibernate进行插入和更新的方式有关。当使用“nullable=true”(或根本不使用任何内容)时,Hibernate将跳过insert上的外键列,并在稍后使用update语句对其进行更新。但是,如果“nullable=false”,则外键将位于insert中,但其值不正确,随后将由update语句更新?!这是一个非常低效的问题,也是我非常想解决的问题(为什么PostgreSQL的差异如此之大,我仍然不明白?)。可能还有其他一些因素影响hibernate的插入操作顺序,但从这个描述中还不清楚。a已经成功地解决了这个问题。如果外键不允许为null,则在持久化数据时,Hibernate被迫采用广度优先的方法。还有一件事也增加了复杂性,那就是这棵树并不像我想象的那样“完美”。这使得这种做法比我想象的要糟糕得多。我在某种程度上放松了对一对多关系的限制,以便Hibernate能够以一种它认为更有效的顺序(自底向上)保持。