Я новичок в Spring и пытаюсь изучить его вместе с Hibernate.
У меня есть ситуация, когда у меня есть Users
и Tasks
в качестве сущностей, и у меня есть отношение ManyToMany между ними. Я смог реализовать это весной, используя следующие классы:
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
в 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
отображается в массив usernames
или, возможно, массив ids
. Однако это не будет правильно регистрироваться. Джексон, скорее всего, ожидает массив Users
, и не существует конструктора User
с одним String
. Но даже если бы существовал, не было бы способа найти правильного пользователя, так как этот конструктор должен был бы быть создан на уровне model
.
В общем, я хотел бы знать, что такое хороший шаблон подойти к этой проблеме? Должен ли я поставить дополнительный лог c на моем контроллере? Может ли кто-нибудь вести меня по пути к праведности.