質問

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

Query q =em.createNamedQuery("select bc from Bondecommande bc where bc.idbc = :idbc");

after em.createQuery here, and good

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top