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

时间:2019-10-11 07:10:54

标签: java spring-boot spring-data-jpa spring-data jpql

我正在开发一个应用程序,该应用程序允许我使用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)!"

2 个答案:

答案 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;
}

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