如何通过jpql中的属性(name_techno)查找数据

how to find the data by an attribute (name_techno) in jpql

我正在开发一个允许管理公司候选人的应用程序,为此我使用 spring-boot,以便 select 掌握这种技术的员工(Techno)我使用请求 JPQL.

那么,如何通过 techno 找到候选人?

在我的项目中我使用了这段代码:

1 - class 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-classTechno.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)!"

你不需要为此添加明确的@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);

您可以在您的 JpaRepository 中声明以下方法(同时删除 @Query,不需要)。

List<Candidat> findDistinctByTechnoNomTechno(String nomTechno);

同样在 Techno.java 中,您应该添加 @Column 注释并将其映射到数据库模式。

我不确定您是否故意粘贴了不完整的实体代码。如果不是,则您的实体不正确。您应该创建 setters/getters 如下

 private String nomTechno;

@Column(name = "NOM_TECHNO")
public String getNomTechno() {
    return nomTechno;
}

public void setNomTechno(String nomTechno){
   this.nomTechno = nomTechno;
}

对实体中的所有变量执行上述操作。