Hibernate自定义排序和java.text.Collator

Hibernate自定义排序和java.text.Collator,java,hibernate,sorting,hibernate-4.x,Java,Hibernate,Sorting,Hibernate 4.x,我需要根据字段按asc或dsc顺序对结果集进行排序。该字段的类型为String,包含用户名。现在这些名字是法国名字。因此,为了根据用户的姓名对用户列表进行排序,我通常使用以下代码: final Collator collator = Collator.getInstance(Locale.FRANCE); Comparator<ActivityUserDTO> comparator = new Comparator<ActivityUserDTO>() { @

我需要根据字段按asc或dsc顺序对结果集进行排序。该字段的类型为String,包含用户名。现在这些名字是法国名字。因此,为了根据用户的姓名对用户列表进行排序,我通常使用以下代码:

final Collator collator = Collator.getInstance(Locale.FRANCE);

Comparator<ActivityUserDTO> comparator = new Comparator<ActivityUserDTO>() {

    @Override
    public int compare(ActivityUserDTO dto1, ActivityUserDTO dto2) {
        return collator.compare(dto1.getFullName(), dto2.getFullName());
    }
};

Collections.sort(users, comparator);
这里的
sortField
是法语的
fullName
sortOrder
可以是
true
false

有没有办法以定制的方式进行排序,这样它就可以进行排序/排序,而排序/排序是由
Collator
完成的?任何指针都会对我很有帮助

我看过一些网站,如:

他们使用
比较器
关联对象集
进行排序,但在我的情况下如何进行排序

这是我的
用户

@javax.persistence.Entity
@Table(name = "USER")
public class User extends Entity {

    @Transient
    private static final long serialVersionUID = -112950002831333869L;

    private String username;
    private String firstName;
    private String lastName;
    private String fullName;
    private String mail;
    private String homePostalAddress;
    private String mobile;
    private String homePhone;
    private Date dateOfBirth;
    private Date dateOfJoining;
    private Date dateOfRelease;
    private boolean active;
    private String role;
    private Set<Activity> activities;

    public User() {
        super();
    }

    @NaturalId
    @Column(name = "USERNAME", nullable = false)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Column(name = "FIRST_NAME")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "LAST_NAME")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name = "FULL_NAME")
    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    @Column(name = "MAIL")
    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    @Column(name = "HOME_POSTAL_ADDRESS")
    public String getHomePostalAddress() {
        return homePostalAddress;
    }

    public void setHomePostalAddress(String homePostalAddress) {
        this.homePostalAddress = homePostalAddress;
    }

    @Column(name = "MOBILE")
    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    @Column(name = "HOME_PHONE")
    public String getHomePhone() {
        return homePhone;
    }

    public void setHomePhone(String homePhone) {
        this.homePhone = homePhone;
    }

    @Column(name = "DATE_OF_BIRTH")
    public Date getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    @Column(name = "DATE_OF_JOINING")
    public Date getDateOfJoining() {
        return dateOfJoining;
    }

    public void setDateOfJoining(Date dateOfJoining) {
        this.dateOfJoining = dateOfJoining;
    }

    @Column(name = "DATE_OF_RELEASE")
    public Date getDateOfRelease() {
        return dateOfRelease;
    }

    public void setDateOfRelease(Date dateOfRelease) {
        this.dateOfRelease = dateOfRelease;
    }

    @Column(name = "ACTIVE", nullable = false)
    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    @Column(name = "ROLE")
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @ManyToMany(cascade = { CascadeType.ALL }, mappedBy = "users", targetEntity = Activity.class)
    public Set<Activity> getActivities() {
        return activities;
    }

    public void setActivities(Set<Activity> activities) {
        this.activities = activities;
    }
}
@javax.persistence.Entity
@表(name=“USER”)
公共类用户扩展实体{
@短暂的
私有静态最终长serialVersionUID=-11295000283133869L;
私有字符串用户名;
私有字符串名;
私有字符串lastName;
私有字符串全名;
私人字符串邮件;
私人弦乐家装;
私有字符串移动;
私人电话;
私人出生日期;
加入日期;
私人租赁日期;
私有布尔活动;
私有字符串角色;
私人活动;
公共用户(){
超级();
}
@归化
@列(name=“USERNAME”,null=false)
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
@列(name=“FIRST_name”)
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
@列(name=“LAST_name”)
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
@列(name=“全名”)
公共字符串getFullName(){
返回全名;
}
public void setFullName(字符串fullName){
this.fullName=fullName;
}
@列(name=“MAIL”)
公共字符串getMail(){
回信;
}
公共无效设置邮件(字符串邮件){
this.mail=邮件;
}
@列(name=“家庭\邮政\地址”)
公共字符串getHomePostalAddress(){
返乡邮资;
}
公共无效设置HomePostLaddress(字符串HomePostLaddress){
this.homePostalAddress=homePostalAddress;
}
@列(name=“MOBILE”)
公共字符串getMobile(){
返回手机;
}
公共void setMobile(字符串移动){
this.mobile=mobile;
}
@列(name=“家庭电话”)
公共字符串getHomePhone(){
返回家庭电话;
}
公用void setHomePhone(字符串homePhone){
this.homePhone=homePhone;
}
@列(name=“出生日期”)
公共日期getDateOfBirth(){
出生返回日期;
}
公共无效设置出生日期(出生日期){
this.dateOfBirth=出生日期;
}
@列(name=“加入日期”)
公开日期getDateOfJoining(){
加入的返回日期;
}
公共无效设置加入日期(加入日期){
this.dateOfJoining=加入日期;
}
@列(name=“发布日期”)
公共日期getDateOfree(){
归还日期;
}
公共无效设置释放日期(释放日期){
this.dateOfRelease=释放日期;
}
@列(name=“ACTIVE”,nullable=false)
公共布尔isActive(){
主动返回;
}
public void setActive(布尔激活){
这个.active=active;
}
@列(name=“ROLE”)
公共字符串getRole(){
返回角色;
}
公共void setRole(字符串角色){
this.role=角色;
}
@ManyToMany(cascade={CascadeType.ALL},mappedBy=“users”,targetEntity=Activity.class)
公共集合getActivities(){
返回活动;
}
公共活动(集合活动){
这是活动=活动;
}
}

Hibernate不进行排序。数据库是这样做的。执行一个条件查询归结为执行一个SQL查询,该查询包含一个
orderbyfullname
子句

因此,请检查数据库的配置,了解如何指定表或列使用的排序规则

ALTER DATABASE adb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

完成了任务。

谢谢你的建议。我们需要在数据库或表级别指定排序规则。我在下面添加了一个答案,它完成了任务。再次感谢。
ALTER DATABASE adb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;