Репозиторий данных Spring - составной ключ и не нужно сохранять объект - PullRequest
0 голосов
/ 28 мая 2020

Я работаю со сторонней базой данных, доступной только для чтения. У меня есть следующий репозиторий 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) - это функция с табличным значением (поэтому она возвращает таблицу) .

...