2012-04-16 81 views
2

我正在将ejb 2应用程序迁移到ejb 3.1。两种技术将不得不共存一段时间。我的一个实体bean的是这样的:jpa命名查询未找到

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 

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

感谢

凯利

+0

请在需要查询的地方添加代码。 – JMelnik 2012-04-16 15:27:45

回答

0

你应该可以使用下面的代码来调用查询:

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

此外,它是常见的做法是前缀,因为查询类名的命名查询名称必须是唯一的。因此,通过名称获取实体的查询应该被命名为Entity.GetByName