У меня есть класс "Кино" и класс "Актер".Я отобразил их в сущностях как OneToMany и наоборот (в одном фильме может быть много актеров).Crnk создает конечные точки, и они прекрасно работают, кроме ссылки в разделе «отношения» на «Актере», создающей URL-адрес, который находится под конечной точкой «Актера», когда он действительно должен вернуться к корневому URL фильма.
Так под актерами findAll relationships.movie.links.related
должно быть:
"related": "/api/v1/movies/1"
вместо
"related": "/api/v1/actors/156/movie"
и аналогично для self
Movie findAllконечная точка
{
"data": [
{
"id": "1",
"type": "v1/movies",
"attributes": {
"name": "I.M.Movie"
},
"relationships": {
"actors": {
"links": {
"self": "/api/v1/movies/1/relationships/actors",
"related": "/api/v1/movies/1/actors"
}
}
},
"links": {
"self": "/api/v1/movies/1"
}
}
],
"meta": {
"totalResourceCount": null
}
}
Актер findAll конечная точка
{
"data": [
{
"id": "156",
"type": "v1/actors",
"attributes": {
"name": "I.R.Actor"
},
"relationships": {
"movie": {
"links": {
"self": "/api/v1/actors/156/relationships/movies",
"related": "/api/v1/actors/156/movies"
}
},
},
"links": {
"self": "/api/v1/actors/156"
}
}
],
"meta": {
"totalResourceCount": null
}
}
Вот сущности и аннотации их отношений:
MovieEntity
@Entity(name = "movie")
@JsonApiResource(type = "v1/movies")
@Data
public class MovieEntity implements BaseEntity<String> {
@Id
@JsonApiId
@Column(name="MID")
private String id;
@JsonIgnore
@Column(name = "ID")
private String secondId;
private String name;
@OneToMany(mappedBy = "movie", cascade = CascadeType.ALL)
@JsonApiRelation
@JsonManagedReference
private List<ActorEntity> actors;
}
ActorEntity
@Entity(name = "SP")
@JsonApiResource(type = "v1/actors")
@Getter
@Setter
public class ActorEntity implements BaseEntity<String> {
@Id
@JsonApiId
@Column(name = "ID")
private String id;
private String name;
@ManyToOne
@JoinColumn(name = "MOVIEID", referencedColumnName = "ID")
@JsonApiRelation(serialize = SerializeType.LAZY)
@JsonBackReference
private MovieEntity movie;
}
Вы также заметите, что у фильма есть два идентификатора, у него есть основной первичный ключ с использованием столбца MID
, но в качестве внешнего ключа используется столбец ID
, который также является уникальным идентификатором.К сожалению, это настройка базы данных, которую нельзя изменить.Кроме того, насколько я могу судить, использование referencedColumnName
должно обойти эту проблему.
Если у кого-то есть какие-либо предложения о том, почему это может не работать в его текущем состоянии, это будет очень признательно
Спасибо!
ps Я изменил имена классов по причинам паранойи, на случай, если я что-то пропустил, и переменная где-то не совсем совпадает