我正在开发一个应用程序,该应用程序允许我使用spring-boot来管理公司中的应聘者,以便选择精通我使用请求JPQL
的员工(Techno)。
那么,我该如何通过techno找到候选人?
在我的项目中,我使用了以下代码:
1-类 candidat.java
@Entity
public class Candidat {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "candidat_id")
private int id;
private String nom;
private String prenom;
private String ville;
private int numTel;
private String mail;
private String pseudo;
private String roleCible;
private String typeContrat;
private String villeRecherchee;
@OneToMany(mappedBy="candidat")
private List<Techno> techno;
@Temporal(TemporalType.DATE)
private Date date;
@OneToMany
private List<SecteurActivites> secteurActivites;
public Candidat() {
// TODO Auto-generated constructor stub
}
2-类 Techno.java
@Entity
public class Techno {
@Id
@GeneratedValue
@Column(name = "techno_id")
private int id ;
private String nomTechno;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "candidat_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Candidat candidat;
public Techno() {
// TODO Auto-generated constructor stub
}
/**
* @param nomTechno
* @param candidat
*/
public Techno(String nomTechno, Candidat candidat) {
super();
this.nomTechno = nomTechno;
this.candidat = candidat;
}
3-我的 CandidatController
@GetMapping(value = "/GetAllCandidats/{nomTechno}")
public List<Candidat> afficherCandidat(@PathVariable ("nomTechno") String nomTechno){
return candidatdao.findByTechno(nomTechno);
}
4- 存储库:
@Repository
public interface CandidatDao extends JpaRepository <Candidat, String>{
List<Candidat> findByDate(Date date);
@Query("SELECT DISTINCT e FROM Candidat e INNER JOIN e.Techno t")
List<Candidat> findByTechno(String nomTechno);
}
5- app.properties
server.port= 9090
spring.jpa.show-sql = true
spring.datasource.url= jdbc:mysql://localhost:3306/database
spring.datasource.username=??
spring.datasource.password=??
spring.jpa.hibernate.ddl-auto=update
控制台中的结果为:
"Validation failed for query for method public abstract java.util.List com.avatar.dao.CandidatDao.findByTechno(java.lang.String)!"
答案 0 :(得分:0)
您无需为此添加显式的@Query
,如果方法名称正确,Spring数据可以制定查询
代替
@Query("SELECT DISTINCT e FROM Candidat e INNER JOIN e.Techno t")
List<Candidat> findByTechno(String nomTechno);
尝试
List<Candidat> findDistinctByTechno_NomTechno(String nomTechno);
答案 1 :(得分:0)
您可以在JpaRepository中声明以下方法(也可以删除@Query,这是不需要的)。
List<Candidat> findDistinctByTechnoNomTechno(String nomTechno);
还在Techno.java中,您应该添加@Column批注并将其与数据库模式映射。
我不确定您是否故意粘贴了不完整的实体代码。如果不是,您的实体是不正确的。您应按照以下
的方式创建设置器/获取器。 private String nomTechno;
@Column(name = "NOM_TECHNO")
public String getNomTechno() {
return nomTechno;
}
public void setNomTechno(String nomTechno){
this.nomTechno = nomTechno;
}
对您实体中的所有变量执行上述操作。