join语句使用JPQL(使用hibernate jpa)存储在列表中

时间:2012-07-10 00:20:18

标签: hibernate java-ee jpa jpql

我有一个工作日志表,它有onetomany连接到Jiraissue表,它还有ManyToOne到其他几个表。

我根据我的要求写了一个jqpl语句如下。

@NamedQueries({
    @NamedQuery(name = "Worklog.findbySelection", query = "SELECT distinct workl.jiraissueWorklog.pkey, workl.jiraissueWorklog.summary, workl.jiraissueWorklog.issuestatusOBJ.pname, workl.jiraissueWorklog.cwduserOBJ.displayName, workl.jiraissueWorklog.created, workl.jiraissueWorklog.updated   FROM Worklog workl where workl.jiraissueWorklog.project = :project  and  workl.startdate between :startDate AND  :endDate" ),
     })

现在我想将输出存储在列表对象中,所以我把它作为Worklog对象。

    @SuppressWarnings("unchecked")
    public List<JiraissueColumns> findByDateProject(Date startDate,Date endDate,long projectID){

        Query query = em.createNamedQuery("Worklog.findbySelection");
        query.setParameter("startDate", startDate);
        query.setParameter("endDate", endDate);
        query.setParameter("project", projectID);
        this.listOfWorklog = (List<JiraissueColumns>) query.getResultList();
            return listOfWorklog;
    }

当我使用for循环查找列表中的内容时,我收到以下错误。

Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to listOfWorklog

我确实理解listOfWorklog只能接受类型Worklog和Jiraissue对象,但Jiraissue又有Project,issuelist对象。这些是否会继承到Worklog。

从JPQL语句获取输出的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您使用的是非通用的Query类。对于参数化类型的Query,有一个TypedQuery:

TypedQuery<JiraissueColumns> query = em.createNamedQuery(
    "Worklog.findbySelection",
    JiraissueColumns.class);

query.setParameter("startDate", startDate);
query.setParameter("endDate", endDate);
query.setParameter("project", projectID);

return listOfWorklog = query.getResultList();

这将通过调用List<JiraissueColumns>返回query.getResultList()