Java 找不到命名查询
我使用EJB3,试图从数据库中获取一个简单的字符串,但我收到了这个消息 未找到命名查询:从Travauxdereseauurbain tr中选择tr 我真的不明白这意味着什么 这是实体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
@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”的命名查询,否则查询将导致相同的错误: