hibernate - JPA 条件查询 order by - 获取重复记录
问题描述
Hiiii,我在一个项目中使用 J2EE 和 JPA 2.1 EclipseLink 实现。我的操作系统是 Windows10。我正在尝试根据用户名(表 ID)对所有用户进行排序。我有一个超级类“Utilisateur”和两个子类“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<>();}
然后是孩子 Respaudit
@Entity
@Table(name = "RESPAUDIT", catalog = "", schema = "HSEMS_DB")
@PrimaryKeyJoinColumn(referencedColumnName = "IDUSER")
public class Respaudit extends Utilisateur implements Serializable {
private static final long serialVersionUID = 1L;
@JoinColumn(name = "respAudit", referencedColumnName = "equipe")
@OneToOne(cascade = CascadeType.MERGE, mappedBy = "respAudit")
private Auditeur equipe;
}
紧随其后的是最后一个孩子Membraudit
@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;
}
当我在子表上使用 order by 方法对记录进行排序时。它给出了重复的记录。我尝试使用以下 findAll 方法中所示的“distinct”方法,但似乎没有效果。
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;
}
任何人都可以让我知道如何在不重复的情况下做到这一点吗?先感谢您
解决方案
推荐阅读
- css - 何时编译 SASS
- javascript - 具有较高角度的圆圈周围的项目
- android - Android中的密钥库问题
- java - 如何将我的项目转换回 IntelliJ 项目?
- java - JavaFX Ant 构建失败,JDK 10.0.2 Eclipse Photon
- jpa - Jpa标准api中空结果的通用假查询
- linux - 如何在Linux中匹配2个文件一个文件有1列,第二个文件有2列
- angular - 使用 queryParams 重定向到 url
- apostrophe-cms - 多个小部件视图
- active-directory - 使用 Halyard 的 Spinnaker LDAP