Hibernate SET元素顺序子句



我想知道,我可以找到我的和平与事实,你可以设置的顺序属性上的映射文件中的set元素当fetch=select,但如果你获取一切在你创建查询的时候。这样安全吗?

我的意思是,他们将结果泵入HashSet,我不认为这些不能保证元素顺序吗?

Hibernate实际上不会将结果泵入HashSet,它将用自己的Set实现取代任何现有的HashSet

当你通过调用persist()使实例持久化时,Hibernate实际上会用Hibernate自己的Set实现实例替换HashSet。

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html

如果您使用order-by属性,那么它将不使用HashSet,可能会使用LinkedHashSet代替。参考我上面引用的同一份文件:

如果您希望数据库本身对集合元素排序,请使用set、bag或map映射的order-by属性。此解决方案使用LinkedHashSet或LinkedHashMap实现,并在SQL查询中而不是在内存中执行排序。

因此Hibernate将安全地维护Set中的项的顺序-但是在创建新对象并持久化它们时要小心。如果在新对象中使用HashSet而不是LinkedHashSet,那么Hibernate将以基本上随机的顺序保存您的集合,因为HashSet不保证元素顺序。

最新更新