【发布时间】:2016-03-16 16:18:00
【问题描述】:
我正在尝试按照 JPQL 执行此操作:
@Query("select o from Offre o where o.typeContrat.titre=:a or o.ville.nomVille=:b or o.competences.libelleCompetance = :c")
public Page<Offre> offresSearch(@Param("a") String type, @Param("b") String location, @Param("c") String competence,Pageable pageable);
这是我的Offre实体:
@Entity
public class Offre implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "CODE_OFFRE")
private Long codeOffre;
private String titre;
@Lob
private String description;
@ManyToOne
@JoinColumn(name="codeContratType")
private TypeContrat typeContrat;
@ManyToMany
@JoinTable(name="OFFRE_COMP",
joinColumns=@JoinColumn(name="CODE_OFFRE"),
inverseJoinColumns=@JoinColumn(name="CODE_COMPETENCE"))
private List<Competence> competences;
// Getters and setters
这是我的能力实体:
@Entity
public class Competence implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "CODE_COMPETENCE")
private Long codeCompetence;
private String libelleCompetance;
@ManyToMany(mappedBy="competences")
private Collection<Offre> offres;
// Getters, Setters
@JsonIgnore
@XmlTransient
public Collection<Offre> getOffres() {
return offres;
}
@JsonSetter
public void setOffres(Collection<Offre> offres) {
this.offres = offres;
}
}
但是当我运行我的应用程序时,我收到了这个错误:
java.lang.IllegalArgumentException: org.hibernate.QueryException: 非法尝试取消引用集合 [offre0_.code_offre.competences] 带有元素属性参考 [libelleCompetance] [从 com.capValue.Rekrute.entities.Offre 中选择 o o 其中 o.typeContrat.titre=:a 或 o.ville.nomVille=:b 或 o.competences.libelleCompetance = :c] 在 org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750) ...
【问题讨论】:
-
您可能需要显式加入而不是向下钻取参考。