Java 将集合与@OrderColumn组合

Java 将集合与@OrderColumn组合,java,hibernate,Java,Hibernate,对于m-n关系,一般建议使用Set而不是List,因为它为某些操作提供了更好的性能 我试图将其与注释@OrderColumn(name=“position”)结合起来。我使用它,所以我不需要“联接表类”。我希望Hibernate根据元素在集合中的位置设置位置值。因此,我使用了LinkedHashSet @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER) @JoinTabl

对于m-n关系,一般建议使用
Set
而不是
List
,因为它为某些操作提供了更好的性能

我试图将其与注释
@OrderColumn(name=“position”)
结合起来。我使用它,所以我不需要“联接表类”。我希望Hibernate根据元素在集合中的位置设置位置值。因此,我使用了
LinkedHashSet

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinTable(name = "bundle_group_to_bundle", joinColumns = @JoinColumn(name = "fk_bundle_group"), inverseJoinColumns = @JoinColumn(name = "fk_bundle"))
@OrderColumn(name = "position", nullable = false)
private Set<Bundle> bundles = new LinkedHashSet<>();
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.EAGER)
@JoinTable(name=“bundle\u group\u to\u bundle”,joinColumns=@JoinColumn(name=“fk\u bundle\u group”),inverseJoinColumns=@JoinColumn(name=“fk\u bundle”))
@OrderColumn(name=“position”,null=false)
私有集bundles=新LinkedHashSet();
我不能让它工作。Hibernate在读取或写入实体时完全忽略“位置”属性。只要我将其替换为
列表
它就可以正常工作

Hibernate是否支持带有
Set
@OrderColumn


注意:我尝试使用
SortedSet
而不是
Set
,但这需要
@Sort
(已弃用)或
@OrderBy
(不能与
@OrderColumn
一起使用),而在我的情况下,我不能使用这些问题。

这与Java问题相比,不是一个休眠问题。
Set
界面不保证任何订单()。因此,在Java中,如果需要任何排序或顺序,就不能使用普通的
集合

另外,Hibernate根据字段定义创建映射,即使
LinkedHashSet
保持插入顺序,框架也会使用
Set
来完成他的工作。通过hibernate加载的任何实体都将使用
Set
的自定义实现,即
PersistentSet

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinTable(name = "bundle_group_to_bundle", joinColumns = @JoinColumn(name = "fk_bundle_group"), inverseJoinColumns = @JoinColumn(name = "fk_bundle"))
@OrderColumn(name = "position", nullable = false)
private Set<Bundle> bundles = new LinkedHashSet<>();
另一方面,
List
SortedSet
接口保留顺序并允许排序


实际上,
Set
在某些操作上通常比
List
性能更好。但是如果您不能使用
SortedSet
,您的选择就很有限。

同样的问题。我很惊讶,在列表中找不到@OrderColumn必须的任何文档。。。但似乎情况就是这样。有兴趣解释一下!:)那么你在Javadoc的什么地方读到了关于订单的内容?也许你把最后一段关于不可修改集合的部分弄错了。这是一个Hibernate问题,因为Hibernate可以检测到
Set
@OrderColumn
是否一起使用,然后不使用
PersistentSet
。文档中说:
正如其名称所暗示的,此接口为数学集合抽象建模。
在数学中,集合是一组不同元素的集合,其中排列和顺序无关紧要[Wikipedia](.在某些方法的文档中(如
set.iterator()
)也强烈暗示了这一点,因为缺少任何
sort
方法,如
List
)。