栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

休眠状态是否保留LinkedHashSet的顺序?如果是,则如何?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

休眠状态是否保留LinkedHashSet的顺序?如果是,则如何?

首先:我假设您正在谈论两个实体之间的关系。就像是

@Entitypublic 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实现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号