Loop JPA-массив без запуска Lob-выборки

Если определены следующие Spring JPA Entities:

@Entity class Album( @Id val id: Long = 0, ... @OneToMany(mappedBy = "album") val mediaItems: Set<Media>) : Serializable @Entity @Table(name = "media") class Media( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(columnDefinition = "serial") var id: Long? = null, @Column @Lob var content: ByteArray 

Определение включает в себя ленивый выбранный столбец @Lob, который на самом деле ленив, поскольку база данных подкладок использует большие объекты Postgres. Моя пружина jpa поддерживается спящим режимом. При переходе через записи mediaItems spring jpa все записи автоматически извлекают связанный контент @Lob, даже не касаясь столбца содержимого. Этот вывод Lob не требуется для текущей сериализации и чрезвычайно замедляет цикл. Вот моя петля:

 val albumProtocs = MediaProtocs.AlbumList.newBuilder().addAllAlbum( ownAlbum.map { album -> MediaProtocs.Album.newBuilder() .setId(album.id) .setName(album.name) .addAllMedia(album.mediaItems.map { media -> MediaProtocs.Media.newBuilder().setId(media.id as Long) .setDescription(media.description) .setMimeType(media.mimetype).build() }).build() }).build() 

Hibernate загружает все ленивые поля, если вы вызываете какой-либо метод объекта entity, за исключением геттеров. Вам просто нужно найти, какой метод вызывается.

Вы можете попытаться загрузить список медиа напрямую без альбома. Также вы можете попробовать загрузить список носителей в список DTO с помощью прогнозов.