Мы используем crnk для json-api как на стороне сервера, так и на стороне клиента.
Поддерживает ли реализация сервера для привязок jpa фильтры субреляций?
Мы хотим отфильтровать все серии, в которых есть события после определенного времени начала.
Мы разделили классы сущностей json-api и JPA. Пожалуйста, смотрите ниже оба json-api как классы сущностей
например. URL, который я использую (и генерируется клиентским кодом crnk):
EpgShow?include[EpgShow]=titles&filter[EpgShow][titles.startTime][GE]=2018-05-04T12:30:22+02:00
Ошибка, которую мы получаем:
{
errors: [
{
status: "500",
title: "INTERNAL_SERVER_ERROR",
detail: "failed to resolve path [titles, startTime]"
}
]
}
Реализация класса:
@JsonApiResource(type = "EpgShow")
public class EpgSeriesDto {
@JsonApiId
private Integer serieId;
@JsonApiRelation(opposite = "epgShow", lookUp = LookupIncludeBehavior.AUTOMATICALLY_WHEN_NULL, serialize = SerializeType.ONLY_ID, repositoryBehavior = RelationshipRepositoryBehavior.FORWARD_OWNER)
private Set<EpgTitleDto> titles;
}
@JsonApiResource(type = "EpgTitle")
@Data
public class EpgTitleDto {
@JsonApiId
private Long id;
@JsonApiRelation(opposite = "titles", lookUp = LookupIncludeBehavior.AUTOMATICALLY_WHEN_NULL, serialize = SerializeType.ONLY_ID)
private EpgSeriesDto epgShow;
}
@Entity
public class Serie {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "serie_id", unique = true, nullable = false)
private Integer serieId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "epgShow")
private Set<Event> titles = new HashSet<Event>(0);
}
@Entity
public class Event {
@Column(name = "start_time")
private ZonedDateTime startTime;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "serie_id")
private Serie epgShow;
}