Привет, мы пытаемся вернуть список заданий, содержащий список умений. Вот наш код:
@Query(nativeQuery =true, value="select * from jobs j inner join( select * from job_skills js where skill_id IN (?1.skill_id)) on j.job_id = js.job_id")
List<Job> findBySkills(List<Skill> skills);
Однако, когда мы тестируем с Postman и отправляем запрос POST, мы получаем ошибку:
org.hibernate.QueryException: JPA- стиль позиционного параметра не был целым порядковым числом;
Мы используем Spring Boot с PostgreSQL. Мы предполагаем, что проблема заключается здесь (?1.skill_id)
Как мы можем исправить это, чтобы получить список всех навыков из таблицы заданий с запрашиваемым идентификатором?
Вот наша Модель задания с отображениями JPA
@Entity
@Table(name = "jobs")
public class Job {
@Id
@Column(name = "job_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
/** An integer that uniquely identifies this job. */
private int id;
@Column(name = "job_title")
/** The name of this job. */
private String title;
@Column(name = "job_description", length=10_000)
/** A description of this job, with a maximum length of 10,000 characters. */
private String description;
@Column(name = "job_location")
/** A string identifying where the job takes place. */
private String location;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "job_skills", joinColumns = { @JoinColumn(name = "job_id") }, inverseJoinColumns = {
@JoinColumn(name = "skill_id") })
/** A set of skills that candidates applying to this job are expected to have. */
private Set<Skill> skills = new HashSet<>();
@Column(name = "job_isFilled")
/** Returns true if the job opening is currently filled, and false otherwise. */
private boolean isFilled;
@OneToMany(mappedBy="job")
private Set<Interview> interviews = new HashSet<>();
@OneToOne
@JoinColumn(name = "filled_by_profile_id")
/** The employee that currently holds this job. Returns null if it is not held by any employee. */
private Profile profile;
/** Creates a new job with all properties set to their default values. */
public Job() {
super();
}
А вот наша Модель умений (показывает только соответствующие сопоставления)
@Entity
@Table(name = "skills")
public class Skill {
@Id
@Column(name = "skill_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
/** An integer that uniquely identifies this skill. */
private int id;
@Column(name = "skill_title")
/** The name of this skill. */
private String title;
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE }, mappedBy = "skills")
@Column(name = "profiles")
/** A set of candidates who claim proficiency in this skill. */
@JsonIgnore
private Set<Profile> profiles = new HashSet<>();
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE }, mappedBy = "skills")
@Column(name = "jobs")
/** A set of jobs that this skill is necessary for. */
@JsonIgnore
private Set<Job> jobs = new HashSet<>();
/** Creates a new skill with all properties set to their default values. */
public Skill() {
super();
}