0

JPQLを参照すると、テーブルをクエリする方法が正確にわかりません。

私が欲しいのは、存在する場合@Entity Note、特定のmessagIdとグループの ですが、構文がわかりません。

以下のクエリの messageId と group を指定するにはどうすればよいですか?

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);
    }
}

}

4

2 に答える 2

1

setParameter()を使用して、クエリのパラメータを設定する必要があります。

http://en.wikibooks.org/wiki/Java_Persistence/Querying#Parametersを参照してください 。

于 2012-05-10T14:00:41.770 に答える
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);
    }
}
于 2012-05-10T14:02:00.107 に答える