java.lang.IllegalArgumentException: Named query not found:
Solution 1
Use em.createQuery(...
instead of em.createNamedQuery()
If you work with named queries (what I would recommend) you have to place the query inside a @NamedQuery annotation on your entity class.
Solution 2
In JPA query and named query are not the same things.
Named queries have "names" and you define them by adding @NamedQueries
annotation on your entity type class:
@Entity
@Table(name="bondecommande")
@NamedQueries({
@NamedQuery(name="Bondecommande.findByIdbc", query="select bc from Bondecommande bc where bc.idbc = :idbc"),
@NamedQuery(name="...", query="..."),
})
public class Bondecommande implements Serializable {
....
}
You use named queries by passing the name of the query to create method:
Query q =em.createNamedQuery("Bondecommande.findByIdbc");
I recommend to use TypedQuery<T>
not Query
if you are using JPA 2.x
Solution 3
createNamedQuery()
takes a name of a query and not the query itself.
The Query can be defined by an annotation @NamedQuery
Take a look at this:
http://docs.oracle.com/javaee/6/api/javax/persistence/NamedQuery.html
Related videos on Youtube
Bellil Med Samouel
Updated on July 09, 2022Comments
-
Bellil Med Samouel almost 2 years
I got the following code
@Stateless public class BondecomandeDAO { @PersistenceContext private EntityManager em; public Bondecommande findBCbyid(int id) { Query q =em.createNamedQuery("select bc from Bondecommande bc where bc.idbc = :idbc"); q.setParameter("idbc", id); return (Bondecommande) q.getResultList().get(0); } }
and
@Entity @Table(name="bondecommande") public class Bondecommande implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="idbc") private int idbc; @Column(name="devise") private String devise; @Column(name="modepaiement") private String modepaiement; @Column(name="modelivraison") private String modelivraison; @Column(name="delaipaiement") private int delaipaiement; ////other attributes , getters and setters }
When I try to run the function
findBCbyid(int id)
I get this errorjava.lang.IllegalArgumentException: Named query not found: select bc from Bondecommande bc where bc.idbc = :idbc
Although I used this named query in an another project, and it worked, what could be the problem here?