В моем приложении Spring Boot (на основе JHipster 4) я пытаюсь использовать выражения свойств для фильтрации моего запроса по атрибутам связанных сущностей, как описано в документации Spring:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions
Я хочу получить все назначения, с определенным счетом сотрудника в их AppointmentSchedules, но получить только пустой список.
@Repository
public interface AppointmentRepository extends JpaRepository<Appointment, Long> {
public List<Appointment> findByScheduledAppointmentsEmployeeAccountsId(Long id);
}
соответствующие лица и их отношения:
@Entity
@Table(name = "appointment")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Appointment implements Serializable {
@OneToMany(mappedBy = "appointments")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<AppointmentSchedule> scheduledAppointments = new HashSet<>();
...
}
@Entity
@Table(name = "appointment_schedule")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class AppointmentSchedule implements Serializable {
@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "appointment_schedule_employee_accounts", joinColumns = @JoinColumn(name = "appointment_schedules_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "employee_accounts_id", referencedColumnName = "id"))
private Set<EmployeeAccount> employeeAccounts = new HashSet<>();
...
}
@Entity
@Table(name = "employee_account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class EmployeeAccount implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
...
}
Вывод консоли Hibernate при выполнении запроса:
Hibernate: select appointmen0_.id as id1_1_, appointmen0_.institution_id as institut2_1_, appointmen0_.user_account_id as user_acc3_1_ from appointment appointmen0_ where appointmen0_.user_account_id=?
Буду очень признателен, если кто-нибудь скажет мне, что я здесь делаю не так.
Edit:
Обратите внимание, что таблица Appointment не содержит столбец для AppointmentSchedules, так как это отношение OneToMany. Может в этом причина? Я думал, что JPA справится с этой логикой для меня ...
Структура таблицы:
APPOINTMENT;
ID ...
APPOINTMENT_SCHEDULE;
ID APPOINTMENTS_ID ...
APPOINTMENT_SCHEDULE_EMPLOYEE_ACCOUNTS;
EMPLOYEE_ACCOUNTS_ID APPOINTMENT_SCHEDULES_ID
EMPLOYEE_ACCOUNT;
ID ...
РЕДАКТИРОВАТЬ 2:
Я был в состоянии решить проблему. Это была классическая ошибка PEBCAK, потому что я случайно вызвал метод с аналогичным именем в своем классе обслуживания facepalm . Большое спасибо всем, кто мне помог! Ответы Гаурава Шривастава и Дина работают, но не являются необходимыми, так как оригинальный код из вопроса уже работает