У меня есть 3 объекта: Пользователь, Офис и Роль. Роль и Office уже существуют в базе данных.
В SQL объект User ссылается на Office с его идентификатором и ссылается на Role с его именем. Пример записи в SQL:
Role table:
1 | USER
Office table:
1 | Office 1
User table:
John | Doe | john.doe@mail.com | Password123 | 1 | USER
For user table:
1 -> reference to Office
USER -> reference to Role
Ролевой объект:
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "t_role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
}
Офисный объект:
@Data
@Entity
@Table(name = "t_office")
public class Office {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
}
Пользовательский объект:
@Data
@Entity
@Builder
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="role", referencedColumnName="name")
private Role role;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "office_id", referencedColumnName="id")
private Office office;
}
Возникает вопрос: как добиться сохранения пользователя, не указывая в теле запроса все объекты Office и Role, а только идентификатор Office и имя роли? Может быть нужно использовать DTO или десериализатор? Заранее спасибо.
Мне нужно тело запроса вроде этого:
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@mail.com",
"password": "Password123",
"officeId": 1,
"role": "USER"
}
Вместо тела запроса вроде этого:
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@mail.com",
"password": "Password123",
"office": {
"id": 1,
"name": "Office 1"
},
"role": {
"id": 1,
"name": "USER"
}
}