我正在开发一个应用程序,允许管理公司中的候选人,为此我使用spring-boot,为了选择掌握这种技术(Techno)的员工,我使用了一个请求JPQL
.
那么,如何通过技术找到候选人?
在我的项目中我使用了以下代码:
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)!"
最佳答案
您可以在 JpaRepository 中声明以下方法(也可以删除 @Query,它不是必需的)。
List<Candidat> findDistinctByTechnoNomTechno(String nomTechno);
此外,在 Techno.java 中,您应该添加 @Column 注释并将其与数据库模式进行映射。
我不确定您是否故意粘贴了不完整的实体代码。如果不是,您的实体不正确。您应该按如下方式创建 setter/getter
private String nomTechno;
@Column(name = "NOM_TECHNO")
public String getNomTechno() {
return nomTechno;
}
public void setNomTechno(String nomTechno){
this.nomTechno = nomTechno;
}
对实体中的所有变量执行上述操作。
关于java - 如何通过jpql中的属性(name_techno)查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58335991/