[英]JPQL query using a DiscriminatorColumn in Spring JpaRepository results in QuerySyntaxException: xxx is not mapped
我想選擇具有CLIENT角色的用戶,但出現此錯誤:
由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:utilisateur未映射到org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException。從utilisateur中選擇u.role =:CLIENT)。 java:79)〜[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)〜[hibernate-core-5.3.10.Final .jar:5.3.10.Final]位於org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:219)〜[hibernate-core-5.3.10.Final.jar:5.3.10.Final]在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143)〜[hibernate-core-5.3.10.Final.jar:5.3.10.Final] ...
Utilisateur.java:
// imports omitted for brevity
@Entity
@Table(name="UTILISATEURS")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="ROLE")
public class Utilisateur implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long codeUtilisateur;
private String cin;
private String nom;
private String prenom;
private String username;
private String password;
private String telephone;
private String ville;
private Boolean actif;
private String adresse;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateNaissance;
private String email;
private char genre;
public Utilisateur() {
super();
}
public Utilisateur(long code) {
this.codeUtilisateur = code;
}
public Utilisateur(String cin, String nom, String prenom, String telephone, String email, char genre, Boolean actif) {
super();
this.cin = cin;
this.nom = nom;
this.prenom = prenom;
this.telephone = telephone;
this.email = email;
this.genre = genre;
this.actif = actif;
}
public Utilisateur(String cin, String nom, String prenom, String username, String password, String telephone,
String ville, String adresse, Date dateNaissance, String email, char genre, Boolean actif) {
super();
this.cin = cin;
this.nom = nom;
this.prenom = prenom;
this.username = username;
this.password = password;
this.telephone = telephone;
this.ville = ville;
this.adresse = adresse;
this.dateNaissance = dateNaissance;
this.email = email;
this.genre = genre;
this.actif = actif;
}
// getters/setters omitted for brevity
}
UtilisateurRepository.java:
// imports omitted for brevity
public interface UtilisateurRepository extends JpaRepository <Utilisateur,Long> {
@Query ("SELECT u FROM utilisateurs u WHERE u.role=:CLIENT")
public List<Client> getClients();
}
我看到您的存儲庫有幾個問題。
Entity
名。 Utilisateur
對象List
,但是getClients()
的簽名返回List<Client>
而不是List<Utilisateur>
。 :CLIENT
)進行匹配,該替代值不屬於getClients()
簽名的一部分。 您正在使用以下注釋將Utilisateur
配置Utilisateur
:
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="ROLE")
因此,假設您至少有一個Utilisateur
子類Client
,您正在嘗試查詢該子類:
@Entity
public class Client extends Utilisateur {...}
在這種情況下,請嘗試以下操作:
public interface UtilisateurRepository extends JpaRepository <Utilisateur,Long> {
@Query ("SELECT u FROM Utilisateur u WHERE TYPE(u) = Client")
public List<Utilisateur> getClients();
}
否則,您可能希望有一個單獨的ClientRepository:
public interface ClientRepository extends JpaRepository<Client,Long> {
// in which case you can just take advantage of findAll
// which is already provided by JpaRepository
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.