Hibernate JPA条件查询按顺序获取重复记录

Hibernate JPA条件查询按顺序获取重复记录,hibernate,jpa,inheritance,sql-order-by,Hibernate,Jpa,Inheritance,Sql Order By,Hiiii, 我在一个项目上使用J2EE和JPA2.1EclipseLink实现。我的操作系统是Windows10。 我正在尝试根据用户名(表ID)对所有用户进行排序。 我有一个超级Cals“Usilizateur”和两个子类“RespAudit”和“MembreAudit”,实现如下: @Entity @Table(name = "UTILISATEUR", catalog = "", schema = "HSEMS_DB") @Inheritance(strategy

Hiiii, 我在一个项目上使用J2EE和JPA2.1EclipseLink实现。我的操作系统是Windows10。 我正在尝试根据用户名(表ID)对所有用户进行排序。 我有一个超级Cals“Usilizateur”和两个子类“RespAudit”和“MembreAudit”,实现如下:

    @Entity
    @Table(name = "UTILISATEUR", catalog = "", schema = "HSEMS_DB")
    @Inheritance(strategy = InheritanceType.JOINED)
    public class Utilisateur implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 255)
        @Column(name = "IDUSER")
        private String iduser;

        @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message = "E-mail invalide!")//if the field contains email address consider using this annotation to enforce field validation
        @Size(max = 255)
        @Column(name = "EMAIL")
        private String email;

        @Size(min = 2, max = 255, message = "Taille du champ invalide!")
        @Column(name = "NOM")
        private String nom;

        @Size(min = 2, max = 255, message = "Taille du champ invalide")
        @Column(name = "PRENOM")
        private String prenom;

        @Size(min = 8, message = "La taille du mot de passe doit etre entre 8 et 20 caractères")
        @Column(name = "PASSWORD")
        private String password;

        @OneToMany(mappedBy = "utilisateur",cascade = CascadeType.MERGE)
        private List<Commentaire> commentaireList = new ArrayList<>();

        @OneToMany(mappedBy = "utilisateur",cascade = CascadeType.MERGE)
        private List<JournalLog> LogList = new ArrayList<>();

        @OneToMany(mappedBy = "utilisateur",cascade = CascadeType.MERGE)
        private List<Fichier> filesList = new ArrayList<>();}
紧随其后的是最后一个childMembraudit



    @Entity
    @Table(name = "MEMBREAUDIT", catalog = "", schema = "HSEMS_DB")
    @PrimaryKeyJoinColumn(referencedColumnName = "IDUSER")

    public class Membreaudit extends Utilisateur implements Serializable {

        private static final long serialVersionUID = 1L;

        @JoinColumn(name = "IDEQUIPE")
        @ManyToOne
        private Auditeur equipe;

       @OneToMany(mappedBy = "idMembre", cascade = CascadeType.MERGE)
        private List<Affectation> affectationList;
    }

@实体
@表(name=“MEMBREAUDIT”,catalog=“”,schema=“HSEMS_DB”)
@PrimaryKeyJoinColumn(referencedColumnName=“IDUSER”)
公共类Membreaudit扩展了usilizateur实现可序列化{
私有静态最终长serialVersionUID=1L;
@JoinColumn(name=“IDEQUIPE”)
@许多酮
私人审计设备;
@OneToMany(mappedBy=“idMembre”,cascade=CascadeType.MERGE)
私人清单做作清单;
}
当我对子表使用orderby方法对记录进行排序时。它提供了重复的记录。 我曾尝试使用“distinct”方法,如下面的findAll方法所示,但似乎没有效果

public List<T> findAll(String attribute) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        cq.orderBy(getEntityManager().getCriteriaBuilder().asc(cq.from(entityClass).get(attribute))).distinct(true);
        List<T> myList = getEntityManager().createQuery(cq).getResultList();
        return myList;
    }
公共列表findAll(字符串属性){
javax.persistence.CriteriaQuery cq=getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
orderBy(getEntityManager().getCriteriaBuilder().asc(cq.from(entityClass.get(attribute))).distinct(true);
List myList=getEntityManager().createQuery(cq.getResultList();
返回myList;
}
有人能告诉我怎么做没有副本吗? 提前感谢您

请提供更多详细信息:)如您的查询是如何生成的,以及一些代码示例,以便我们可以帮助您请提供更多详细信息:)如您的查询是如何生成的,以及一些代码示例,以便我们可以帮助您
public List<T> findAll(String attribute) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        cq.orderBy(getEntityManager().getCriteriaBuilder().asc(cq.from(entityClass).get(attribute))).distinct(true);
        List<T> myList = getEntityManager().createQuery(cq).getResultList();
        return myList;
    }