JSON 到 parent 中的关系 link 不 link 备份一级,可能是由于两个键
Relationship links in JSON to parent don't link back up one level, possibly due to two keys
我有一个"Movie"class和一个"Actor"class。我在实体中将它们映射为 OneToMany,反之亦然(一部电影可以有很多演员)。 Crnk 正在创建端点并且它们工作得很好,除了 "Actor" 上的 "relationships" 下的 link 在 "Actor" 端点下创建了一个 URL 当它真的应该回到根 Movie URL.
所以在 Actors 下 findAll relationships.movie.links.related
应该是:
"related": "/api/v1/movies/1"
而不是
"related": "/api/v1/actors/156/movie"
self
也类似
电影查找所有端点
{
"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
}
}
Actor 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;
}
演员实体
@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;
}
您还会注意到 Movie 有两个 ID,它的主键使用列 MID
,但用作外键的列是 ID
,这也是一个唯一 ID .不幸的是,这是数据库的设置,无法更改。另外,据我所知,使用 referencedColumnName
应该可以解决这个问题。
如果有人对为什么这在当前状态下无法工作有任何建议,我们将不胜感激
谢谢!
p.s 出于偏执狂的原因,我更改了 class 名称,以防万一我遗漏了一些东西并且某个地方的变量不完全一致
目前不支持 referencedColumnName 注释属性。但是可以考虑在 JpaRelationshipRepository 实现中引入对 的支持。目前它严格基于主键。
我有一个"Movie"class和一个"Actor"class。我在实体中将它们映射为 OneToMany,反之亦然(一部电影可以有很多演员)。 Crnk 正在创建端点并且它们工作得很好,除了 "Actor" 上的 "relationships" 下的 link 在 "Actor" 端点下创建了一个 URL 当它真的应该回到根 Movie URL.
所以在 Actors 下 findAll relationships.movie.links.related
应该是:
"related": "/api/v1/movies/1"
而不是
"related": "/api/v1/actors/156/movie"
self
电影查找所有端点
{
"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
}
}
Actor 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;
}
演员实体
@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;
}
您还会注意到 Movie 有两个 ID,它的主键使用列 MID
,但用作外键的列是 ID
,这也是一个唯一 ID .不幸的是,这是数据库的设置,无法更改。另外,据我所知,使用 referencedColumnName
应该可以解决这个问题。
如果有人对为什么这在当前状态下无法工作有任何建议,我们将不胜感激
谢谢!
p.s 出于偏执狂的原因,我更改了 class 名称,以防万一我遗漏了一些东西并且某个地方的变量不完全一致
目前不支持 referencedColumnName 注释属性。但是可以考虑在 JpaRelationshipRepository 实现中引入对 的支持。目前它严格基于主键。