为了账号安全,请及时绑定邮箱和手机立即绑定

在 Spring JpaRepository 中使用 DiscriminatorColumn

在 Spring JpaRepository 中使用 DiscriminatorColumn

慕后森 2023-07-19 16:17:31
我想选择具有客户端角色的用户,但出现此错误:导致: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;        }
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

我发现您的存储库存在几个问题。

  1. 您正在使用表名称而不是EntityJPQL 查询中的名称。

  2. 您尝试选择一个List对象,但返回Utilisateur的签名而不是。getClients()List<Client>List<Utilisateur>

  3. 您正在尝试将角色与:CLIENT不属于您的getClients()签名一部分的替换值 ( ) 进行匹配。

您正在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

}


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信