Hibernate以什么顺序将子列表与Cascade.ALL一起保存?

时间:2016-07-20 11:11:59

标签: hibernate hibernate-mapping

我有实体A,其中包含使用Cascade.ALL注释的B实体的子列表。生成实体ID。当我持久化实体A时,列表B中的哪个实体将首先被保存?给定B列表看起来像这样:B1,B2,B3,B4,我可以假设它首先会保存B1,然后是B2等吗?因此,B1将始终具有最小的ID,因为它将首先保存?

当我检索已保存的实体A时,我遇到了奇怪的行为。我的B实体的子列表有@OrderBy(值=" id desc")以确保最新的实体是总是先行,但实际上,实体A中的子列表B似乎是随机排序的。

1 个答案:

答案 0 :(得分:0)

@OrderBy注释控制检索所附加的集合的顺序。它不控制插入顺序。来自documentation

  

指定在检索关联或集合时集合值关联或元素集合的元素的排序。

正如明智的@a_horse_with_no_name所评论的那样,你不应该依赖来自Hibernate的内部“命令”的任何概念(它实际上只是在你的数据库之上)。如果您需要在插入期间保留Java List中存在的某些订单,那么您应该为此目的创建一个属性(列)。