Hibernate JPA条件查询按顺序获取重复记录
Hiiii, 我在一个项目上使用J2EE和JPA2.1EclipseLink实现。我的操作系统是Windows10。 我正在尝试根据用户名(表ID)对所有用户进行排序。 我有一个超级Cals“Usilizateur”和两个子类“RespAudit”和“MembreAudit”,实现如下: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
@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;
}