Я пытаюсь познакомиться с весной и jpa.Для запуска есть таблица anime_details , содержащая подробности аниме.Поскольку он может иметь много жанров, у db есть еще одна таблица с именем genre .Промежуточная таблица, которая будет содержать их много-много записей отношений, также находится там.Когда я запрашиваю любое аниме по идентификатору, он должен возвращать детали аниме вместе с жанрами.
Он возвращает объект с деталями аниме и списком объектов жанра (как и ожидалось).Но я хочу ограничить столбцы, которые будут выбираться из объектов жанра.Например, только идентификатор или только идентификатор и имя (в случае, если столбцов больше, чем эти).
AnimeDetails
@Getter
@Setter
@Entity
@Table(name = "anime_details")
public class AnimeDetails {
@Id
@SequenceGenerator(name = "animeDetailsSeq", sequenceName =
"anime_details_id_seq",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"animeDetailsSeq")
private Integer id;
private String name;
private Integer episodes;
private Date started;
private Date ended;
private String status;
@ManyToMany
@JoinTable(
name = "anime_genre",
joinColumns = @JoinColumn(name = "details_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "genre_id", referencedColumnName = "id"))
@JsonManagedReference
private List<Genre> genres;
protected AnimeDetails() {
}
}
Жанр
@Data
@Entity
@Table(name = "genre")
public class Genre {
@Id
@SequenceGenerator(name = "genreSeq", sequenceName = "genre_id_seq",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "genreSeq")
private Integer id;
private String name;
@ManyToMany(mappedBy = "genres")
List<AnimeDetails> animes;
protected Genre() {
}
}
Ожидаемая полезная нагрузка
{
"id": 2,
"name": "Your Name",
"episodes": 1,
"started": "2016-08-25T18:00:00.000+0000",
"ended": "2016-08-25T18:00:00.000+0000",
"status": "Completed",
"genres": [
{
"id": 5,
"name": "Drama"
},
{
"id": 10,
"name": "Supernatural"
}
]
}
Прямо сейчас я получаю результат и вручную получаю столбцы один за другим и устанавливаю их в DTO.Но это неэффективно, поскольку запрос к базе данных уже извлекает больше данных, чем необходимо.Есть ли какая-нибудь конкретная аннотация / свойство / jpql для ее уменьшения?