jpa命名查询未找到

时间:2012-04-16 14:41:18

标签: jpa ejb-3.0

我正在将ejb 2应用程序迁移到ejb 3.1。两种技术都必须共存一段时间。我的一个实体bean看起来像这样:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name = "migracao_jsf")
@NamedQueries({
    @NamedQuery(name = "migracao_query", query = "select p from MigracaoJsf p")
    })
public class MigracaoJsf implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    @Column(name = "name")
    @Id
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
} 

在jboss 6.1中的部署日志中,我可以看到实体已部署。

 [AnnotationBinder] Binding entity from annotated class: myclass.MigracaoJsf

但是我无法找到查询解析的日志。当我尝试调用它时,我得到一个查找未找到的异常。为什么实体部署正确且查询未解析?

由于

凯利

1 个答案:

答案 0 :(得分:0)

您应该能够使用以下代码调用查询:

EntityManager em;
// em is created sonehow
TypedQuery<MigracaoJsf> q = em.createNamedQuery("migracao_query", MigracaoJsf.class);

通常的做法是使用类名称为命名查询添加前缀,因为查询名称必须是唯一的。因此,按名称获取实体的查询应命名为Entity.GetByName