hibernate - JSON 中与父级的关系链接不会链接到上一级,可能是由于两个键
问题描述
我有一个“电影”课程和一个“演员”课程。我已将实体中的这些映射为 OneToMany,反之亦然(一部电影可以有很多演员)。Crnk 正在创建端点并且它们运行良好,除了“演员”上的“关系”下的链接创建一个位于“演员”端点下的 URL,当它真的应该返回到根电影 URL 时。
所以在 Actors 下 findAllrelationships.movie.links.related
应该是:
"related": "/api/v1/movies/1"
而不是
"related": "/api/v1/actors/156/movie"
和类似的 forself
电影 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
}
}
以下是实体及其关系注释:
电影实体
@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,它的主键使用 column MID
,但用作外键的列ID
也是唯一 ID。不幸的是,这是数据库的设置,无法更改。另外,据我所知,使用referencedColumnName
应该可以解决这个问题。
如果有人对为什么这可能无法在当前状态下工作有任何建议,将不胜感激
谢谢!
ps我出于偏执的原因更改了类名,以防万一我错过了某些东西并且某处的变量没有完全对齐
解决方案
到目前为止,不支持 referencedColumnName 注释属性。但是可以考虑在 JpaRelationshipRepository 实现中引入对 的支持。目前它是严格基于主键的。
推荐阅读
- scala - 用于检查 kafka 代理(服务器)是否可用的 Scala 代码
- c++ - 使用estimateAffinePartial2D 可能导致内存损坏
- javascript - 如何在悬停时更改 SVG 的笔触颜色?
- python - 如何使用 selenium 和 python 来点击这种类型的子菜单链接
- reactjs - Ant Design Form 中的输入元素非常慢
- c++ - 可以用模板替换类类型信息宏吗?
- java - 如何在配置过程中关闭 Spring 应用程序?
- java - Android 从 HTML 读取 JSON
- c# - WrapPanel WPF 中的 StackPanel
- android - 从视图中获取活动上下文是否正确,例如 mvvm 中的按钮