在 Spring JpaRepository 中使用 DiscriminatorColumn

我想选择具有客户端角色的用户,但出现此错误:

导致:org.hibernate.hql.internal.ast.QuerySyntaxException:utilisateur未映射[SELECT u FROM utilisateur u WHERE u.role =:CLIENT]在org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException。 java:79) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] 在 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;

        }


慕后森
浏览 150回答 1
1回答

天涯尽头无女友

我发现您的存储库存在几个问题。您正在使用表名称而不是EntityJPQL 查询中的名称。您尝试选择一个List对象,但返回Utilisateur的签名而不是。getClients()List<Client>List<Utilisateur>您正在尝试将角色与:CLIENT不属于您的getClients()签名一部分的替换值 ( ) 进行匹配。您正在Utilisateur使用以下注释作为父级进行配置:@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="ROLE")因此,我假设您至少有一个 , 的子类Utilisateur, Client您正在尝试查询该子类:@Entitypublic class Client extends Utilisateur {...}在这种情况下,请尝试以下操作:public interface UtilisateurRepository extends JpaRepository <Utilisateur,Long> {&nbsp; &nbsp; @Query ("SELECT u FROM Utilisateur u WHERE TYPE(u) = Client")&nbsp; &nbsp; public List<Utilisateur> getClients();}否则,您可能希望有一个单独的 ClientRepository:public interface ClientRepository extends JpaRepository<Client,Long> {&nbsp; &nbsp; // in which case you can just take advantage of findAll&nbsp; &nbsp; // which is already provided by JpaRepository}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java