我正在将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
但是我无法找到查询解析的日志。当我尝试调用它时,我得到一个查找未找到的异常。为什么实体部署正确且查询未解析?
由于
凯利
答案 0 :(得分:0)
您应该能够使用以下代码调用查询:
EntityManager em;
// em is created sonehow
TypedQuery<MigracaoJsf> q = em.createNamedQuery("migracao_query", MigracaoJsf.class);
通常的做法是使用类名称为命名查询添加前缀,因为查询名称必须是唯一的。因此,按名称获取实体的查询应命名为Entity.GetByName
。