2013-03-01 2 views
2

Мне нужно отсортировать набор результатов в зависимости от поля по порядку asc или dsc. Это поле имеет тип String и содержит имена пользователей. Теперь имена французского имени. Таким образом, чтобы сортировать список пользователей на основе их имен обычно я использую следующий код:Hibernate пользовательский заказ и java.text.Collator

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); 

В этом случае у меня есть целый список users загруженных из базы данных, а затем я делаю Söring.

Теперь следующий код для спящего режима, где у меня есть startIndex: который устанавливает FirstResult для Criteria, maxResult: который устанавливает MaxResults из Criteria и упорядоченность:

Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(entityClass); 

if (StringUtils.isNotEmpty(sortField)) { 
    criteria.addOrder(sortOrder ? Order.asc(sortField) : Order.desc(sortField)); 
} 

criteria.setFirstResult(startIndex); 
criteria.setMaxResults(maxResult); 

Здесь sortField является fullName, который по-французски и sortOrder может быть либо true, либо false.

Есть ли способ сделать заказ по-своему, чтобы он сортировал/заказывал, что делает Collator? Любой указатель будет очень полезен для меня.

Я видел некоторые сайт, как:

, где они используют Comparator для сортировки Set of Assoicated Objects, но как я могу это сделать в моем дело?

Это мой User:

@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; 
    } 
} 

ответ

2

Hibernate не делает сортировку. База данных. Выполнение запроса критериев сводится к выполнению SQL-запроса, имеющего предложение order by fullName.

Так что проверьте конфигурацию своей базы данных, чтобы узнать, как указать сортировку, используемую таблицей или столбцом.

+0

Благодарим за предложение. Нам нужно указать сортировку на уровне базы данных или таблицы. Я добавил ответ, ниже которого была выполнена работа. Еще раз спасибо. –

0
ALTER DATABASE adb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

выполнил эту работу.

 Смежные вопросы

  • Нет связанных вопросов^_^