首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL查询连接中列的最大int值

JPQL查询连接中列的最大int值
EN

Stack Overflow用户
提问于 2012-08-05 15:51:29
回答 1查看 1.7K关注 0票数 0

如何使用JPQL查询连接的最大值,如下所示:SELECT MAX(MESSAGENUMBER) FROM ARTICLE left join NEWSGROUP on ARTICLE.NEWSGROUP_ID=NEWSGROUP.ID WHERE NEWSGROUP.newsgroup = "gwene.com.economist";

代码语言:javascript
复制
package net.bounceme.dur.usenet.driver;

import java.util.logging.Logger;
import javax.mail.Folder;
import javax.mail.Message;
import javax.persistence.*;
import net.bounceme.dur.usenet.model.Article;
import net.bounceme.dur.usenet.model.Newsgroup;

class DatabaseUtils {

    private static final Logger LOG = Logger.getLogger(DatabaseUtils.class.getName());
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("USENETPU");
    private EntityManager em = emf.createEntityManager();

    /*
     * SELECT MAX(MESSAGENUMBER) FROM ARTICLE left join NEWSGROUP on
     * ARTICLE.NEWSGROUP_ID=NEWSGROUP.ID WHERE NEWSGROUP.newsgroup =
     * "gwene.com.economist";
     */
    public int getMax(Folder folder) {
        em.getTransaction().begin();
        int max = 5;
        em.getTransaction().commit();
        return max;
    }

    public void persistArticle(Message message, Folder folder) {
        //do all the persistence here?
        em.getTransaction().begin();
        String fullNewsgroupName = folder.getFullName();
        Newsgroup newsgroup = null;
        TypedQuery<Newsgroup> query = em.createQuery("SELECT n FROM Newsgroup n WHERE n.newsgroup = :newsGroupParam", Newsgroup.class);
        query.setParameter("newsGroupParam", fullNewsgroupName);
        try {
            newsgroup = query.getSingleResult();
            LOG.fine("found " + query.getSingleResult());
        } catch (javax.persistence.NoResultException e) {
            LOG.fine(e + "\ncould not find " + fullNewsgroupName); 
            newsgroup = new Newsgroup(folder);
            em.persist(newsgroup);  
        } catch (NonUniqueResultException e) {
            LOG.warning("\nshould never happen\t" + fullNewsgroupName);
        }

        Article article = new Article(message, newsgroup);
        em.persist(article); 
        em.getTransaction().commit();
    }

    public void close() {
        em.close();
        emf.close();//necessary?
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-05 16:16:35

您可以使用这样的查询来获取最大消息数:

代码语言:javascript
复制
    String queryString = "select max(article.messagenumber) 
from Article article left join Newsgroup newsgroup on article.newsgroup.id=newsgroup.id 
where newsgroup.newsgroup = "gwene.com.economist"

或者您甚至可以在JPQL中简化查询:

代码语言:javascript
复制
String queryString = "select max(article.messagenumber) 
    from Article article left join article.newsgroup newsgroup
    where newsgroup.newsgroup = "gwene.com.economist"

要执行查询,请使用以下命令:

代码语言:javascript
复制
int maxNumber = (Integer) entityManager.createQuery(queryString).getSingleResult();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11814803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档