[英]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.