Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate中获取可排序集_Java_Hibernate - Fatal编程技术网

Java 如何在hibernate中获取可排序集

Java 如何在hibernate中获取可排序集,java,hibernate,Java,Hibernate,在hibernate中,我们通常对一对多和多对多集合使用集合。到目前为止,这种方法一直运作良好 但是现在我们需要在控制器层对子集合进行越来越多的内存排序,因为不同的视图需要以不同的顺序查看子集合。我们不能只在实体声明中指定一个适用于所有视图的顺序 我们的问题是无法对集合进行Collections.sort,我们担心将集合包装到列表中,因为这可能会破坏绑定(尤其是在父子关系中) 因此,我们正在考虑将所有集合更改为实体中的列表(没有索引列),但这似乎是极端的,我已经读过关于双向一对多和多对多列表关系

在hibernate中,我们通常对一对多和多对多集合使用集合。到目前为止,这种方法一直运作良好

但是现在我们需要在控制器层对子集合进行越来越多的内存排序,因为不同的视图需要以不同的顺序查看子集合。我们不能只在实体声明中指定一个适用于所有视图的顺序

我们的问题是无法对集合进行Collections.sort,我们担心将集合包装到列表中,因为这可能会破坏绑定(尤其是在父子关系中)

因此,我们正在考虑将所有集合更改为实体中的列表(没有索引列),但这似乎是极端的,我已经读过关于双向一对多和多对多列表关系的问题


有什么建议吗?

Google Collections有一个,可能会有帮助。

Google Collections有一个,可能会有帮助。

您可以让设置的对象实现可比较的界面

这样,使用compareTo功能(您必须实现)可以指定集合的顺序


Hibernate初始化集合时,将使用compareTo函数中指定的顺序。

您可以让集合对象实现Comparable界面

这样,使用compareTo功能(您必须实现)可以指定集合的顺序

Hibernate初始化集合时,将使用compareTo函数中指定的顺序。

您可以定义a(也在条件中)或a并实现
比较器。在集合的定义中,您还可以(在3.3中)定义一个
orderby
元素(SQL)

例如:

Formula: Made in DBMS for a particular relation.
<many-to-one name="homeAddress" class="Address" insert="false" update="false">
    <column name="person_id" not-null="true" length="10"/> 
    <formula>'ORDER BY LENGTH(homeAddress)'</formula>   
</many-to-one>

Formula in Criteria: Made in DBMS.
sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();

Sorted: Made in Java and application wide for a particular relation.
<map name="holidays" sort="my.custom.HolidayComparator">
    <key column="year_id"/>
    <map-key column="hol_name" type="string"/>
    <element column="hol_date" type="date"/>
</map>

Order-by clause: Made in DBMS and application wide for a particular relation.
<set name="aliases" table="person_aliases" order-by="lower(name) asc">
    <key column="person"/>
    <element column="name" type="string"/>
</set>
公式:在DBMS中为特定关系生成。
'按长度排序(家庭地址)'
标准中的公式:在DBMS中生成。
sortedUsers=s.createFilter(group.getUsers(),“按此.name排序”).list();
排序:用Java制作,适用于特定关系的应用程序范围。
ORDERBY子句:在DBMS中为特定关系生成,并在应用程序范围内生成。
您可以定义a(也在标准中)或a,并实现
比较器。在集合的定义中,您还可以(在3.3中)定义一个
orderby
元素(SQL)

例如:

Formula: Made in DBMS for a particular relation.
<many-to-one name="homeAddress" class="Address" insert="false" update="false">
    <column name="person_id" not-null="true" length="10"/> 
    <formula>'ORDER BY LENGTH(homeAddress)'</formula>   
</many-to-one>

Formula in Criteria: Made in DBMS.
sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();

Sorted: Made in Java and application wide for a particular relation.
<map name="holidays" sort="my.custom.HolidayComparator">
    <key column="year_id"/>
    <map-key column="hol_name" type="string"/>
    <element column="hol_date" type="date"/>
</map>

Order-by clause: Made in DBMS and application wide for a particular relation.
<set name="aliases" table="person_aliases" order-by="lower(name) asc">
    <key column="person"/>
    <element column="name" type="string"/>
</set>
公式:在DBMS中为特定关系生成。
'按长度排序(家庭地址)'
标准中的公式:在DBMS中生成。
sortedUsers=s.createFilter(group.getUsers(),“按此.name排序”).list();
排序:用Java制作,适用于特定关系的应用程序范围。
ORDERBY子句:在DBMS中为特定关系生成,并在应用程序范围内生成。

我认为排序集可以帮助您。例如:

@OneToMany()
@Sort(comparator = SomeComparator.class, type = SortType.COMPARATOR)
private SortedSet<Item> items= new TreeSet<Item>(SomeComparator.instance());
@OneToMany()
@排序(comparator=SomeComparator.class,type=SortType.comparator)
private SortedSet items=new TreeSet(SomeComparator.instance());

实现您自己的比较器,并将其用于排序集。

我认为排序集可以帮助您。例如:

@OneToMany()
@Sort(comparator = SomeComparator.class, type = SortType.COMPARATOR)
private SortedSet<Item> items= new TreeSet<Item>(SomeComparator.instance());
@OneToMany()
@排序(comparator=SomeComparator.class,type=SortType.comparator)
private SortedSet items=new TreeSet(SomeComparator.instance());

实现您自己的比较器,并将其用于排序集。

如果不知道“这可能会破坏我们的绑定”是什么意思,很难回答。我不会更改实体,除了可能添加一个getFoosAsList方法,该方法将返回一个从持久的Foos集合构建的列表。如果不知道“这可能会破坏我们的绑定”是什么意思,很难回答。我不会更改实体,除了可能添加一个getFoosAsList方法,该方法将返回一个从持久的Foos集合构建的列表。