Я хочу определить двунаправленное отношение @OneToMany. Я сделал это следующим образом:
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private List<CustomerEmployeeRole> roles;
// more fields
}
public class CustomerEmployeeRole {
@ManyToOne
@NotNull
private Customer customer;
// more fields
}
Все работает как положено, единственная проблема в том, что n + 1 запросы выполняются, когда я удаляю клиента. n - количество ролей, которые имеет клиент. Для каждой роли выполняется следующий запрос:
delete from customer_employee_role where id=?
Можно было бы удалить все роли в одном запросе:
delete from customer_employee_role where customer_id=?
Я предполагаю, что hibernate делает n + 1 запросов из-за mappedBy = "customer"
. Я хочу сохранить аннотацию, потому что я хочу избежать таблицы соединений. Есть ли способ сказать hibernate, чтобы выполнить только один запрос вместо n запросов в этом случае? В противном случае мне пришлось бы писать свои собственные запросы, которые тоже работали бы, но это не очень элегантно.