hibernate状态是否保留LinkedHashSet的顺序?如果是,则如何?如果这取决于数据库的类型,那么我想对PostgreSQL有所了解。
背景:
我知道LinkedHashSet的用途是什么,我之所以问这个原因是因为我正在将执行的某些函数的名称记录到与某些“
functionName”表具有多对多关系的“ logError”表中。我需要这些函数保持与执行它们时相同的顺序,因此首先找到对应的“
functionName”对象,将它们放入LinkedHashSet中(在每个函数失败之后),然后持久保存“ logError”对象。
现在,当我再次从数据库中获取“ logError”对象时,是否仍然可以订购它?如果是这样,我很好奇Hibernate是如何做到的。
首先:我假设您正在谈论两个实体之间的关系。就像是
@Entity
public class A {
@ManyToMany
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "A_fk") }, inverseJoinColumns = { @JoinColumn(name = "B_fk") })
private Set<B> bSet = new LinkedHashSet<B>();
}
Hibernate不会自行保留命令!
如果您查看A
从数据库中加载实体时使用的类,那么Set``bSet
is类型是PersistentSet
,是另一个的包装Set
,在我的情况下,这是正常的HashSet
。(HashSet
不保留其元素的顺序。)
即使Hibernate使用List
或LinkedHashSet
,仍然不建议将实现基于自然的(不保证的)数据库顺序。对于MySQL,这是某种反模式。
但是,您可以使用@Sort
注释(org.hibernate.annotations.Sort
)来使排序明确。例如:
@OneToMany(mappedBy = "as")
@Sort(type = SortType.COMPARATOR, comparator = MyBComparator.class);
public SortedSet<C> cs;
ŁukaszRzeszotarski在2012年9月1日添加:
_但是我们必须记住,使用@Sort
注释会导致对内存(jvm)中的对象而不是sql中的对象进行排序。相反,我们可以使用@OrderBy
注释来在sql服务器端进行排序。我(ŁukaszRzeszotarski)认为这两个注释都有一个弱点,即默认情况下设置了排序。我(ŁukaszRzeszotarski)宁愿当“看到”使用order
by子句时,hibernate使用自己的LinkedHashSet实现。
我知道React可能会异步和批量地执行状态更新,以进行性能优化。因此,在调用之后,您永远不能相信会更新状态。但是,您是否信任React按照调用时的顺序更新状态 相同的组件? 不同的组件? 任何有文档支持的答案都是非常感谢的。
问题内容: 我知道React可以异步并批量执行状态更新以优化性能。因此,在调用之后,您将永远无法相信要更新的状态。但是你可以信任的反应 更新相同的顺序状态被称为对 相同的组件? 不同的组件? 考虑在以下示例中单击按钮: 1. 在以下情况下,是否有可能 a为假而b为真 : 2. 在以下情况下,是否有可能 a为假而b为真 : 请记住,这些是我用例的极端简化。我意识到我可以以不同的方式进行操作,例如,在
问题内容: Java的foreach循环是否从第一个对象开始,并且以线性方式工作到结束?例如 是否总是先处理字符串“ Zoe”,然后处理“ Bob”等?没有排序发生?我已经对它进行了测试,但没有找到任何东西,但是我需要保证,在文档中找不到任何东西。 问题答案: 是。顺序不变。这适用于Java类集合框架的所有类型的集合,这些集合实现由for循环使用的迭代器接口。如果要对数组进行排序,则可以使用Arr
问题内容: 我需要发送查询以检索具有特定字符组的值,如下所示: 可以说我对“ XX”感兴趣,因此它应该搜索其值以“ XX”开头或具有“ XX”(空格XX)的任何字段。例如,并且是有效的结果。 我有以下查询, 返回正确的结果,但我需要对它们进行排序 ,使其首先返回开头的内容,然后返回其他结果。如下: 码 问题答案: 使用JPQL(HQL) : 有条件 有了很多麻烦。首先,您必须在子句中使用本机SQL
问题内容: 我正在创建一个JavaScript对象,如下所示 之后,我将它们如下 上面的方法是否按照对象先前的顺序对它们进行了字符串化处理?字符串化后,它们将按照以前的顺序排列为0,1,2 .... 9吗? 问题答案: 文档中没有任何内容可以明确确认数组项的顺序已保留。但是,文档指出,对于非数组属性,不能保证顺序: 非数组对象的属性不能保证以任何特定顺序进行字符串化。不要依赖于字符串化中同一对象内
问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。