如何通过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;
}
对实体中的所有变量执行上述操作。
我正在开发一个允许管理公司候选人的应用程序,为此我使用 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;
}
对实体中的所有变量执行上述操作。