2

我正在将一个 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

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

谢谢

凯利

4

1 回答 1

0

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

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

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

于 2012-06-05T16:23:57.827 回答