У меня две таблицы с отношением многие-к-одному. Например, у меня есть таблица Office и таблица Employee. Один сотрудник принадлежит одному офису, а один офис - нескольким сотрудникам.
Office
@Entity(name = "office")
@Table(name = "office", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Office {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "office_name", nullable = false)
private String officeName;
}
Employee
@Entity(name = "employee")
@Table(name = "employee", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "employee_name", nullable = false)
private String employeeName;
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "office_id", referencedColumnName = "id", nullable = false)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private Office office;
}
OfficeDto
public class OfficeDto {
private Long id;
private String officeName;
}
EmployeeDto
public class EmployeeDto {
private Long id;
private String employeeName;
private OfficeDto office;
}
При вышеуказанном способе определения entity
и DTO
, когда я делаю employee.findAll()
, результат JSON также включает детализацию служебных данных.
Есть ли способ, которым я мог бы достичь ( цель ):
- Когда вы сохраняете новый
employee
, я просто должен упомянуть id
из office
.
- Когда
findAll
сотрудник, я мог выбрать, хочу ли я передать только id
или также весь объект клиенту.
Потому что в текущей ситуации мне нужно определить двух сотрудников DTO
. Первый содержит все данные офиса (например, код EmployeeDto
), а второй заменяет private OfficeDto office
на private int office
.