我有這兩個實體Java類是引用表(jos_content & jos_article_section)。休眠標準與組通過獲取錯誤
@Entity
@Table(name="jos_content",
uniqueConstraints={@UniqueConstraint(columnNames="id")})
public class ContentEntity implements Serializable {
private int id;
private Set<ArticleSectionEntity> josArticleSection;
private String sefUrl;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", unique = true, nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="sef_url")
public String getSefUrl() {
return sefUrl;
}
public void setSefUrl(String sefUrl) {
this.sefUrl = sefUrl;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="article_id")
public Set<ArticleSectionEntity> getJosArticleSection() {
return josArticleSection;
}
public void setJosArticleSection(Set<ArticleSectionEntity> josArticleSection) {
this.josArticleSection = josArticleSection;
}
}
@Entity
@Table(name="jos_article_section", uniqueConstraints= {@UniqueConstraint(columnNames="id")})
public class ArticleSectionEntity implements Serializable {
private int id;
private int articleId;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", nullable=false, length=10)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="article_id", nullable=false)
public int getArticleId() {
return articleId;
}
}
我使用的是組標準接口,通過這樣的:
Criteria contentCriteria = session.createCriteria(ContentEntity.class, "content");
// Join two tables (jos_content, jos_article_section) on jos_content.id = jos_acticle_section.article_id
contentCriteria = contentCriteria.setFetchMode("josArticleSection", FetchMode.JOIN);
contentCriteria = contentCriteria.add(Restrictions.eq("content.id", storyId));
contentCriteria = contentCriteria.add(Restrictions.eq("content.state",1));
//Start Group By Clause
PropertyProjection propProjection = Projections.groupProperty("content.id");
contentCriteria = contentCriteria.setProjection(propProjection);
//End Group By
當我跑我的申請,我得到這個輸出,錯誤爲:
contentCriteria >>>> CriteriaImpl(com.itgd.entity.ContentEntity:content[][content.id=374821, content.state=1]content.id)
14:24:39,649 INFO [STDOUT] Hibernate: select this_.id as y0_ from jos_content this_ where this_.id=? and this_.state=? group by this_.id
14:24:39,659 ERROR [STDERR] java.lang.ClassCastException: java.lang.Integer cannot be cast to com.itgd.entity.ContentEntity
如何我是否必須解決這個錯誤,是否有可能使用Criteria接口保留所有的字段? 如果有人指導我,請讓我知道。
您需要的結果變壓器像[這裏](http://stackoverflow.com/a/25616261/1679310),或者只是預期結果不會是ContentEntity - 而是投影列的數組。正是由異常說:*「結果是int(content.id)...沒有轉換爲ContentEntity * – 2014-09-02 10:29:59
嗨Radim Kohler,你能簡單解釋一下嗎? – TOSHASHU123 2014-09-02 10:55:32
Hi Radim Kohler, 我已經使用這個: PropertyProjection propProjection = Projections.groupProperty(「content.id」); contentCriteria = contentCriteria.setProjection(propProjection); contentCriteria = contentCriteria.setResultTransformer(Transformers.aliasToBean(ContentEntity.clas s)); 並得到所有的值爲空。 – TOSHASHU123 2014-09-02 10:58:52