hibernate是否保留LinkedHashSet的顺序,如果是,如何?

时间:2010-11-22 09:15:35

标签: java hibernate insertion linkedhashset

hibernate是否保留LinkedHashSet的顺序,如果是,如何?如果这取决于数据库的类型,我想知道PostgreSQL的这个。

背景

我知道LinkedHashSet的用途是什么,我问这个的原因是因为我将我执行的一些函数的名称记录到'logError'表中,该表与某些'具有多对多的关系' functionName'表。 我需要这些函数保持与执行它们时相同的顺序,所以首先我找到相应的'functionName'对象,将它们放在LinkedHashSet中(在每个失败的函数之后),然后我坚持'logError'对象。 / p>

现在当我再次从数据库中获取'logError'对象时,它还会被订购吗?如果是这样,我很好奇Hibernate如何做到这一点。

3 个答案:

答案 0 :(得分:13)

答案 1 :(得分:0)

集合没有固有的“顺序”,数据库表也没有 - 您可以在查询数据时应用订单,但除非您保留该顺序(例如,逐行获取行并将它们放入有序容器中)就像一个链表)然后返回的数据也将是无序的。

答案 2 :(得分:0)

当我需要保留项目列表的顺序时,我使用的是Map而不是List

@OneToMany(fetch = FetchType.EAGER, mappedBy = "rule", cascade = CascadeType.ALL)
@MapKey(name = "position")
private Map<Integer, RuleAction>    actions             = LazyMap.decorate(new LinkedHashMap<>(), FactoryUtils.instantiateFactory(RuleAction.class, new Class[] { Rule.class }, new Object[] { this }));

在此Java示例中,positionRuleAction的Integer属性,因此订单以此方式保留。我想在C#这看起来很相似。