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 error
java.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?
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With