在jpa中使用获取关系计数查询

时间:2015-01-30 14:23:22

标签: java hibernate jpa sql-server-2012

这是我的实体: -

public class ArticleType extends BaseEntity implements Serializable
{
    private static final long   serialVersionUID    = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "art_typ_index")
    private Integer             artTypIndex;
    //@Basic(optional = false)
    @Column(name = "art_typ_code", nullable = false)
    private String              artTypCode;
    @OneToMany(mappedBy = "artArtTypIndex", fetch = FetchType.LAZY)
    private Set<Article>        articleSet;

    public ArticleType()
    {
    }

    public ArticleType(Integer artTypIndex)
    {
        this.artTypIndex = artTypIndex;
    }

    public ArticleType(Integer artTypIndex, String artTypCode)
    {
        this.artTypIndex = artTypIndex;
        this.artTypCode = artTypCode;
    }

    public Integer getArtTypIndex()
    {
        return artTypIndex;
    }

    public void setArtTypIndex(Integer artTypIndex)
    {
        this.artTypIndex = artTypIndex;
    }

    public String getArtTypCode()
    {
        return artTypCode;
    }

    public void setArtTypCode(String artTypCode)
    {
        this.artTypCode = artTypCode;
    }

    @XmlTransient
    public Set<Article> getArticleSet()
    {
        return articleSet;
    }

    public void setArticleSet(Set<Article> articleSet)
    {
        this.articleSet = articleSet;
    }   
}

我想检查一下,如果特定的文章类型是否存在任何文章 我试过这个HQL query: -

SELECT 
count(articleType.artTypIndex)
FROM
ArticleType articleType 
join fetch articleType.articleSet article
where articleType.artTypCode = ?

但是这个查询给了我编译错误: -

  

org.hibernate.QueryException:   查询指定的连接提取,但提取的关联的所有者不在选择列表中   [FromElement {explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias = article,role = com.alstom.autofie2.entity.ArticleType.articleSet,tableName = tbl_article,tableAlias = articleset1_,origin = tbl_article_typ   e articletyp0_,columns = {articletyp0_.art_typ_index,className = com.alstom.autofie2.entity.Article}}]

我不明白是什么问题?
谢谢。

1 个答案:

答案 0 :(得分:0)

问题是你是在选择计数而不是实体,但是你正在加入。

您不需要急切地使用未获取的实体加载集合。

尝试使用加入。

或者这可能也有用

选择 articleType,计数(articleType.artTypIndex) 从 ArticleType articleType join fetch articleType.articleSet文章 articleType.artTypCode =?