Мне нужно отсортировать набор результатов в зависимости от поля по порядку 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;
}
}
Благодарим за предложение. Нам нужно указать сортировку на уровне базы данных или таблицы. Я добавил ответ, ниже которого была выполнена работа. Еще раз спасибо. –