0

我使用 EJB 3,我试图从数据库中获取一个简单的字符串,但我收到了这条消息

未找到命名查询:SELECT tr FROM Travauxdereseauurbain tr

我真的不明白这意味着什么。

这是实体

@Entity
@Table(name="Travauxdereseauurbain")
public class Traveauxdereseauurbain implements Serializable {
    private static final long serialVersionUID = 1L;

@Id
@Column(name="idtru")
private int idtru;
@Column(name ="article")
private String article;
@Column (name="designationtraveau")
private String designationtraveau;
@Column(name="unite")
private String unite;
@Column(name="prixHTVA")
private float prixHTVA;
@Column(name="prixTTC")
private float prixTTC;
@Column (name="qtt")
private float qtt;
@Column(name="montantHTVA")
private float montantHTVA;
@Column(name="montantTTC")
private float montantTTC;


///GETTERS, SETTERS AND CONSTRUCTOR   
}

和 DAO 类

@Stateless
public class TravauxdereseauurbainDAO {     

    @PersistenceContext
    private EntityManager em;       

    public Traveauxdereseauurbain affichernimpr()
    {


      Query q =em.createNamedQuery("SELECT tr FROM Travauxdereseauurbain tr");

      return  (Traveauxdereseauurbain) q.getResultList().get(0);
    }
}

最后错误信息是:

Servlet.service()" 倾注 servlet Faces Servlet 一个 généré une 异常:java.lang.IllegalArgumentException:未找到命名查询:SELECT tr FROM Travauxdereseauurbain tr

提前谢谢你

4

3 回答 3

2

你没有调用正确的方法。您需要调用em.createQuery

于 2013-11-08T15:00:22.073 回答
0

您正在使用 createNamedQuery 检索预编译的 HQL 来执行查询。您可以将查询的名称和查询的内容放在域对象上,如下所示

@NamedQuery(name = "aName", query="aHql")
public class Traveauxdereseauurbain implements Serializable {

然后在你的道

em.createNamedQuery("aName);
于 2013-11-08T15:02:26.423 回答
-1

您的查询返回对象列表

 public List<Traveauxdereseauurbain> affichernimpr() {       
            Query query = em.createNamedQuery(""SELECT tr FROM Travauxdereseauurbain tr");
            return (List<Traveauxdereseauurbain>) query.getResultList();
于 2013-11-08T15:06:55.943 回答