java - 父ID未保存在子表Spring JPA2 @OneToMany关系中
问题描述
我有如下所示的 json,它来自第三方服务,我通过开放的 feign 客户端获取它。我正在尝试使用 Spring JPA2 将这些详细信息保存到我的 MySQL 数据库中。
[
{
"request_id": 111,
"name": "ABC",
"groups": [
{
"id": 21,
"group": "grp_A"
},
{
"id": 22,
"group": "grp_B"
}
]
},
{
"request_id": 222,
"name": "ABC",
"groups": [
{
"id": 23,
"group": "grp_C"
}
]
},
{
"request_id": 333,
"name": "ABC",
"groups": [
{
"id": 24,
"group": "grp_A"
}
]
},
{
"request_id": 444,
"name": "ABC",
"groups": [
{
"id": 25,
"group": "grp_C"
}
]
},
{
"request_id": 555,
"name": "ABC",
"groups": []
}
]
我已经为上面的 json 编写了映射,如图所示
请求.java
@Entity
@Table(name = "requests")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Requests {
@Id
@Column(name = "request_id")
private String id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "id", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Groups> groups = Sets.newHashSet();
// getters and setters
}
组.java
@Entity
@Table(name = "groups")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Groups{
@Id
@Column(name = "id")
private String id;
@Column(name = "group")
private String group;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "request_id")
private Requests requests;
// getters and setters
}
现在在我的服务类中,我做了如下所示
List<Requests> allRequests = requestFeignClient.getRequests();
requestRepository.saveAll(allRequests);
除了request_id之外,所有详细信息都保存到数据库中,如下所示。我的预期组表也如下所示
谁能告诉我为什么request_id没有被保存。
解决方案
尝试替换这个:
@OneToMany(mappedBy = "id", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
有了这个:
@OneToMany(mappedBy = "requests", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
推荐阅读
- batch-file - 如何在指示路径的同时在 .bat 文件中使用土耳其语字符?
- java - Java 字符串数组迭代:有什么方法可以让这更简单吗?
- pandas - 熊猫枢纽和集团
- solidity - 为什么我的转会费不能稳定运行
- apache-camel - 如何修复在 POM 中引发错误的 cxf-codegen-plugin
- location - 我的设备阻止了 expo go 中的所有权限
- discord.py - Discord.py 按钮(未嵌入)
- python - 根据另一列的日期和类别创建数据排名
- api - 使用 Airflow API 进行 JWT 身份验证
- flutter - 从 Internet 下载工件时出错