hibernate是否保留LinkedHashSet的顺序,如果是,如何?如果这取决于数据库的类型,我想知道PostgreSQL的这个。
背景
我知道LinkedHashSet的用途是什么,我问这个的原因是因为我将我执行的一些函数的名称记录到'logError'表中,该表与某些'具有多对多的关系' functionName'表。 我需要这些函数保持与执行它们时相同的顺序,所以首先我找到相应的'functionName'对象,将它们放在LinkedHashSet中(在每个失败的函数之后),然后我坚持'logError'对象。 / p>
现在当我再次从数据库中获取'logError'对象时,它还会被订购吗?如果是这样,我很好奇Hibernate如何做到这一点。
答案 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
示例中,position
是RuleAction
的Integer属性,因此订单以此方式保留。我想在C#
这看起来很相似。