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 实现中引入对 的支持。目前它严格基于主键。