J'ai une entité dans une instance d'hibernation appelée mots-clés. Il stocke une liste de mots et le nombre de fois que chaque mot se produit. Les mots ne sont pas uniques. Je veux additionner le total pour chaque mot de la liste. J'utilise le HQLPuis-je spécifier le type d'objet résultat pour une requête HQL?
query select keyword, sum(keywordcount) from Keywords as Keywords group by keyword order by sum(keywordcount) desc
Ce qui me donne le bon résultat. Le problème que j'ai, c'est que lorsque je soumets cette requête, j'obtiens une liste d'objets java.lang.Object. Y at-il un moyen que je puisse dire à HQL de me donner une liste d'objets de type Keywords, puisque ceux-ci ont la structure que je veux.
@Entity
@Table(name = "keywords", catalog = "akiradev")
public class Keywords implements java.io.Serializable {
// Fields
private Integer id;
private Documents documents;
private String keyword;
private Integer keywordcount;
// Constructors
/** default constructor */
public Keywords() {
}
/** full constructor */
public Keywords(Documents documents, String keyword, Integer keywordcount) {
this.documents = documents;
this.keyword = keyword;
this.keywordcount = keywordcount;
}
// Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "document_id")
public Documents getDocuments() {
return this.documents;
}
public void setDocuments(Documents documents) {
this.documents = documents;
}
@Column(name = "keyword")
public String getKeyword() {
return this.keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
@Column(name = "keywordcount")
public Integer getKeywordcount() {
return this.keywordcount;
}
public void setKeywordcount(Integer keywordcount) {
this.keywordcount = keywordcount;
}
}
requête ------- --------
public List<Keywords> getKeywordSum() {
try {
String queryString = "select keyword, sum(keywordcount) from Keywords as Keywords group by keyword order by sum(keywordcount) desc";
Query queryObject = getSession().createQuery(queryString);
List<Keywords> results = (List<Keywords>) queryObject.list();
return results;
} catch (RuntimeException re) {
log.error("finding Documents in descending time order failed", re);
throw re;
}
}
Merci axvat. Votre solution n'était pas ce que je pensais mais est en réalité beaucoup plus sensible que ce que je cherchais :) Vous avez raison d'observer que j'espérais forcer le résultat dans l'objet entité mais en utilisant un DTO est une solution beaucoup plus propre. –