Hiiii, я использую J2EE с реализацией EclipseLink JPA 2.1 для проекта. Моя ОС Windows10. Я пытаюсь упорядочить всех своих пользователей в соответствии с их именем пользователя (идентификатором таблицы). У меня есть суперкласс "Utilisateur" и 2 подкласса "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;
}
Когда я использую порядок по методу в подтаблицах для сортировки записей. Это дает дублированные записи. Я пытался использовать «отличный» метод, как показано в следующем методе 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;
}
Может кто-нибудь дать мне знать, как это сделать без дубликатов? Заранее спасибо