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

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

我正在开发一个应用程序,允许管理公司中的候选人,为此我使用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/

相关文章:

java - 我可以加快扫描端口进程吗?

java - 如何伪造单元测试的最后修改时间?

java - 从 RestFul webservice 处理 Json 数组并传递给soap

jpa - JPQL 过滤子项

java - 使用 spring data JPA 而不是 hibernate

java - 单击红色下划线、@Query、JpaRepository

java - 在 Java 中,是否可以创建类型安全的类映射到其类的实例?

java - 避免参数名称重复

java - 使用自己的类在 ArrayList 中查找字符串值

java - SpringBoot @interface 总结不同注解