Я работаю со сторонней базой данных, доступной только для чтения. У меня есть следующий репозиторий Spring Data:
public interface FolderRepository extends Repository<Folder, Integer> {
@Query(value = "SELECT f.folderId, a.fileId, a.fileName, " //selecting other columns in my app
+ "FROM User.functionSys(:binData) f "
+ "LEFT JOIN User.vFile a "
+ "ON f.fileId = a.fileId "
+ "group by f.folderId, a.fileId, a.fileName",
nativeQuery = true)
List<Folder> getFolders(@Param("binData") byte[] binData);
}
Идентификатор папки и идентификатор файла образуют уникальный ключ. Итак, моя папка выглядит так:
@Entity
@Data
public class Folder implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private FolderFileKey id;
private String fileName;
// several other fields in my app
}
@Embeddable
@Data
class FolderFileKey implements Serializable {
private static final long serialVersionUID = 2L;
private Integer folderId;
private Integer fileId;
}
Проблема в том, что мне действительно нужен список File
объектов, где каждый File
объект содержит список Folder
s ( один и тот же идентификатор файла может находиться в нескольких разных папках ):
@Data
public class FileDto {
private Integer fileId;
private String fileName;
private List<Folder> folders;
}
@Data
public class FolderDto {
private Integer folderId;
private String folderName;
}
Я знаю, что могу написать службу для преобразования объекта Folder в FileDto и FolderDto, но есть ли способ использовать Spring Прогнозы данных или переписывание сущностей для достижения структуры, требуемой в Dtos?
Обновление
User.functionSys(:binData)
- это функция с табличным значением (поэтому она возвращает таблицу) .