2015-09-22 63 views
0

我有通过person_membership表与manyToMany关系链接的成员资格和人员表。 person_membership表包括person_id,membership_id和sequence_number。会员实体具有以下代码以链接到人员表格。Hibernate标准按链接表列排序

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(
     name = "person_membership", 
     joinColumns = { @JoinColumn(name = "membership_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "person_id", nullable = false, updatable = false) } 
) 
public Set<Person> getPersons() { 
    return this.persons; 
} 

检索成员通过使用下面的代码标准进行:

Session session = getSession(); 
     Criteria c = session.createCriteria(Membership.class, "membership"); 
     c.add(Restrictions.eq("membershipNumber", membershipNumber)); 

     return (Membership) c.uniqueResult(); 

我想要做的就是通过排序的person_membership.sequence_number结果。我如何使用标准来做到这一点,或者可能有另一种方法来做到这一点?

我是一个漂亮的,干净的,不用复杂的方式,如果可能的:)后

+0

如果应用uniqueResult,你会得到一个行,所以你想要什么样的顺序? –

回答

0

如果您要订购的人,同时获取,使用JPA @OrderBy注释

@OrderBy("sequenceNumber") 
public Set<Person> getPersons() { 
提“的sequenceNumber”列

如果您想通过person_membership.sequence_number来订购所有会员资格,然后返回结果中的第一个或不同的一个,如下所示。

HQL

select distinct m 
from Membership m 
join m.persons p 
order by p.sequenceNumber; 

标准

Session session = getSession(); 
    Criteria c = session.createCriteria(Membership.class, "membership"); 
    c.createCriteria("membership.persons", "person"); 
    c.add(Restrictions.eq("membershipNumber", membershipNumber)); 
    c.addOrder(Order.asc("person.sequenceNumber")) 
    c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 

    return (Membership) c.uniqueResult(); 
+0

感谢您的评论。上面的throws属性没有找到异常,因为sequence_number属于person_membership表,我没有一个实体用于(Hibernet不需要设置ManyToMany关系。 – zoro74

+0

如果没有映射,那么我想只有方法是通过本机SQL检索 –

+0

谢谢,那也是我的猜想,但是我想先问一下:) – zoro74