java - 使用 Spring Data JPA 在多对多关系中的所有者/子 JSON 数据的良好模式是什么?
问题描述
我是 Spring 新手,我正在尝试与 Hibernate 一起学习它。
我有一种情况,我拥有实体,Users
并且Tasks
它们之间存在多对多关系。我已经能够使用以下类在 Spring 中实现这一点,
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@Column(name = "username", unique = true, nullable = false)
private String username;
private String profile_url;
private String email;
@JsonIgnore
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "user_tasks",
joinColumns = {
@JoinColumn(name = "user_id")
},
inverseJoinColumns = {
@JoinColumn(name = "task_id")
}
)
private Set<Task> tasks = new HashSet<>();
}
和
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String title;
private String description;
private double storyPoints;
@CreationTimestamp
private Instant creationTimestamp;
@UpdateTimestamp
private Instant updateTimestamp;
@ManyToMany(mappedBy = "tasks", cascade = CascadeType.ALL)
private Set<User> users = new HashSet<>();
}
我已经尝试了很多东西,但我似乎无法理解如何在我users
的.json 文件中插入task
json Controller
。当我POST
到/api/users/
我应该能够使用这种JSON
格式时,
{
"name": "Hardworking Employee",
"username": "employee",
"email": "employee@company.com",
"profile_url": "https://profile.pic",
}
这完美地工作。当我POST
到时api/tasks/
,理想情况下我想按照这些方式发送一些东西
{
"title": "Do this also",
"description": "Let's try to do this now",
"storyPoints": 1.25,
"users": [
"employee"
]
}
键users
映射到 Arrayusernames
或ids
. 但是,这不会正确注册杰克逊很可能期望数组Users
,并且没有User
只有一个的构造函数String
。但即使存在,也无法找到正确的用户,因为必须在model
关卡中创建此构造函数。
一般来说,我想知道解决这个问题的好模式是什么?我应该在控制器上添加额外的逻辑吗?谁能引导我走上正义之路。
解决方案
推荐阅读
- python - 将 zip 文件提取到 django 项目中的 s3 存储桶
- audio - 将音频文件的片段与长音频文件进行比较
- python - 如何将 np.random.uniform() 用于现实世界的示例
- perl - 在 IPC::Run 中使用正确的 Perl 数组引用
- python - Matplotlib 日期在 Python 中的图形/日期格式问题上显示不正确的问题
- python - 如何使用 opencv 和 python 处理来自 webrtc 站点的实时视频传输
- oauth-2.0 - 使用 GetOauthSignInLinkAsync 时发送 acr_values
- python - Python 数据框 - .astype(str).astype(int) 给出错误 ValueError: invalid literal for int() with base 10: ''
- javascript - 画布已被带有 computedStyleMap().get("background-image") 的跨域数据污染
- azure-logic-apps - 带有逻辑应用的 Azure APIM:定义被忽略?