У меня есть таблица базы данных, которая содержит метаданные для документов. Моя задача сейчас - получить список с типами документов. Типы документов не являются уникальными в таблице базы данных, но, конечно, я хочу, чтобы они были в моем списке. Sql очень прост:
SELECT DISTINCT groupname, group_displayorder
FROM t_doc_metadata
ORDER BY group_displayorder;
Я узнал, что могу использовать проекции для получения подмножества полей из моей сущности DocMetadata. Я решил это следующим образом. Моя сущность:
@Entity
@Table(name="T_DOC_METADATA")
@Data
public class DocMetadata {
..............
@Column(nullable=false)
private String displayname;
@Column(nullable=false)
private Integer displayorder;
@Column(nullable=false)
private String groupname;
@Column(name="GROUP_DISPLAYORDER",
nullable=false)
private Integer groupDisplayorder;
@Column(name="METADATA_CHANGED_TS",
nullable=false,
columnDefinition="char")
private String metadataChangedTimestamp;
..........
}
Мой интерфейс для проецирования:
public interface GroupnameAndOrder {
String getGroupname();
Integer getGroupDisplayorder();
void setGroupname(String name);
void setGroupDisplayorder(int order);
}
Теперь я подумал, что буду необычайно умен, добавив в свой репозиторий следующие строки:
@Query("select distinct d.groupname, d.groupDisplayorder from DocMetadata d order by d.groupDisplayorder")
public List<GroupnameAndOrder> findSortedGroupnames();
К сожалению, при переборе списка результатов и вызове getGroupname () результат равен нулю.
Итак, я изменил строки в моем хранилище в соответствии с документацией:
public List<GroupnameAndOrder> findBy();
Теперь я получаю имена групп, но, конечно, они не уникальны. Так что это не решает мою проблему.
Есть ли способ получить заказанный список с уникальными именами групп?