Java 找不到命名查询

Java 找不到命名查询,java,hibernate,ejb,Java,Hibernate,Ejb,我使用EJB3,试图从数据库中获取一个简单的字符串,但我收到了这个消息 未找到命名查询:从Travauxdereseauurbain tr中选择tr 我真的不明白这意味着什么 这是实体 @Entity @Table(name="Travauxdereseauurbain") public class Traveauxdereseauurbain implements Serializable { private static final long serialVersionUID = 1

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

未找到命名查询:从Travauxdereseauurbain tr中选择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   
}
还有刀类

@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()“pour la Servlet面向Servlet a généréune异常:java.lang.IllegalArgumentException:未找到命名查询:从Travauxdereseauurbain tr中选择tr


您没有调用正确的方法。您需要调用。

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

@NamedQuery(name = "aName", query="aHql")
public class Traveauxdereseauurbain implements Serializable {
然后在你的刀里

em.createNamedQuery("aName);

您的查询返回一个对象列表

 public List<Traveauxdereseauurbain> affichernimpr() {       
            Query query = em.createNamedQuery(""SELECT tr FROM Travauxdereseauurbain tr");
            return (List<Traveauxdereseauurbain>) query.getResultList();
public List affichernimpr(){
Query Query=em.createNamedQuery(“从Travauxdereseauurbain tr中选择tr”);
return(List)query.getResultList();

我使用了em.createQuery,错误消息变成“Travauxdereseauurbain未映射[从Travauxdereseauurbain tr中选择tr]”这是因为在HQL中,您必须使用类名而不是表名。您的类被称为
traveauxtereseaurbain
,而您的映射表被称为
travauxtereseaurbain
。注意输入错误!此变体仍然不正确。
em.createNamedQuery
通过一组预定义查询按名称进行查找。因此您的除非存在名为“SELECT tr FROM Travauxdereseauurbain tr”的命名查询,否则查询将导致相同的错误: