2012-04-16 92 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