Можно ли использовать аннотацию JPA @OrderBy для сортировки без учета регистра?

Я использую JPA 2.0, Hibernate 4.1.0.Final и MySQL 5.5. Я хочу использовать аннотацию @OrderBy для сортировки набора в одной из моих сущностей…

@OneToMany(mappedBy = "classroom", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval=true)
@OrderBy(“name”)
private Set<User> roster;

Однако я бы хотел, чтобы набор сортировался без учета регистра или, по крайней мере, сортировал все в соответствии с нижним регистром атрибута «name». Возможно ли это с JPA? Я могу обновить свои версии JPA и Hibernate, если это решит мою проблему.


person Dave    schedule 10.02.2014    source источник
comment
Это полагается на Hibernate, а не на чистый JPA, но вы можете проверить stackoverflow.com/questions/19871765/   -  person SJuan76    schedule 11.02.2014
comment
Другим вариантом может быть определение вычисляемого столбца в базе данных, например lower(name), определение для него свойства (сделать его доступным только для чтения) и упорядочение по нему. Опять же, не очень JPA-иш.   -  person SJuan76    schedule 11.02.2014
comment
Что касается первой опубликованной вами ссылки, где он делает упорядочивание без учета регистра? Создание моей переменной SortedSet не решает моей проблемы.   -  person Dave    schedule 11.02.2014
comment
Сделайте свою сущность реализуемой Comparable и реализуйте как хотите ...   -  person SJuan76    schedule 11.02.2014
comment
Я не хочу этого делать, и это все равно не мой вопрос.   -  person Dave    schedule 12.02.2014


Ответы (1)


ЕСЛИ вы хотите придерживаться стандартных аннотаций JPA и не использовать специфические для провайдера (Hibernate), это невозможно. Однако, используя TreeSet с вашим собственным компаратором, вы можете добиться того же поведения.

eg:

Set<User> roster = new TreeSet<User>(new MyComparator());
person Craig Taylor    schedule 17.02.2014