簡體   English   中英

在Spring JpaRepository中使用DiscriminatorColumn的JPQL查詢導致QuerySyntaxException:未映射xxx

[英]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();
    }

我看到您的存儲庫有幾個問題。

  1. 您在JPQL查詢中使用表名而不是Entity名。
  2. 您試圖選擇一個Utilisateur對象List ,但是getClients()的簽名返回List<Client>而不是List<Utilisateur>
  3. 您試圖將角色與一個替代值( :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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM