【问题标题】:Syntax to query two fields in a table with JPA使用 JPA 查询表中两个字段的语法
【发布时间】:2012-05-19 02:48:48
【问题描述】:

参考JPQL,我不清楚如何查询表。

我想要的是,如果存在的话,@Entity Note 用于给定的messagId 和组,但我不明白语法。

如何为以下查询指定 messageId 和组?

public void persist(Msg message) {
    LOG.info("\t" + message);
    LOG.info("isOpen?" + em.isOpen());
    em.getTransaction().begin();
    int id = message.getId();
    Query q = em.createQuery("SELECT  n "
            + "FROM Notes n WHERE n.messageId = :messageId "
            + "AND n.group = :group");
    List results = q.getResultList();
    em.getTransaction().commit();
    for (Object o : results) {
        LOG.info("object is \n\n" + o);
    }
}

}

【问题讨论】:

  • 设置 :messageId 和 :group 参数,在使用 q.getResultList() 之前使用 q.setParameter("messageId", );q.setParameter("group", ) ;

标签: java jpa persistence jpql toplink


【解决方案1】:

使用setParameter(String name, Object value)

q.setParameter("messageId", id).setParameter("group", group);

为了让它更好,请使用TypedQuery

public void persist(Msg message) {
    LOG.info("\t" + message);
    LOG.info("isOpen?" + em.isOpen());
    em.getTransaction().begin();
    int id = message.getId();
    TypedQuery<Note> q = em.createQuery("SELECT  n "
            + "FROM Notes n WHERE n.messageId = :messageId "
            + "AND n.group = :group", Note.class);
    q.setParameter("messageId", id).setParameter("group", group);
    List<Note> results = q.getResultList();
    em.getTransaction().commit();
    for (Note o : results) {
        LOG.info("object is \n\n" + o);
    }
}

【讨论】:

    【解决方案2】:

    您需要使用 setParameter() 设置查询的参数。

    看, http://en.wikibooks.org/wiki/Java_Persistence/Querying#Parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多