# method createQuery in interface javax.persistence.EntityManager cannot be applied to given types ...



## jimmykimmy (10. Apr 2011)

*UPDATE:*
_Ich habe evtl eine Ahnung: Es könnte mit den Java Versionen zu tun haben?!
Schaut mal unter diesem Link:
JavaEE5: EntityManager (Java EE 5 SDK)
und dann unter diesem:
JavaEE6: EntityManager (Java EE 6 )

Bei JavaEE5 gibt es nur 1 Variante der Funktion "createQuery()". Unter JavaEE6 gibt es 3 Varianten, u.a. auch die variante, die ich benötige "createQuery(java.lang.String qlString, java.lang.Class<T> resultClass)"

Wie kann ich denn auf eine andere Java Version switchen? Hab derzeit dieses JDK (Java SE 6 Update 24) drauf (Java SE Downloads)_





Hallo zusammen,

ich bekomme ständig folgende Fehlermeldung:


> method createQuery in interface javax.persistence.EntityManager cannot be applied to given types required



Laut Oracle.com gibt es 3 Funktionsaufrufe für diese Funktion:


> createQuery(CriteriaQuery<T> criteriaQuery)
> 
> createQuery(java.lang.String qlString)
> 
> createQuery(java.lang.String qlString, java.lang.Class<T> resultClass)



Mein Code sieht wie folgt aus (der Fehler taucht in Zeile 24 auf!):

```
package kbs_prak6;

import kbs_prak6.Mitarbeiter;
import java.util.Scanner;
import javax.persistence.EntityTransaction;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {
    private EntityManagerFactory emf = Persistence.
    createEntityManagerFactory("JPA20Beispiel1PU");
    private EntityManager em = emf.createEntityManager();

    public void beispieldaten() {
        String namen[] = {"Egon", "Erwin", "Ute", "Aische"};
        em.getTransaction().begin();
        for (int i=0; i<namen.length; i++)
        em.persist(new Mitarbeiter(i,namen[i]));
        em.getTransaction().commit();
    }

    public void datenZeigen() {
        for (Mitarbeiter m : em.createQuery("SELECT m FROM Mitarbeiter m", Mitarbeiter.class).getResultList()) {
            System.out.println(m.getMinr() + ": " + m.getName());
        }
    }
    public void schliessen() {
        if (em != null && em.isOpen()) {em.close();}
        if (emf != null && emf.isOpen()) {emf.close();}
    }
    public static void main(String[] args) {
        Main m = new Main();
        m.beispieldaten();
        m.datenZeigen();
        m.schliessen();
    }

    public void namenAendern(){
        int eingabe=-1;
        while(eingabe!=0){
            System.out.print("Welche Nummer (Ende mit 0): ");
            eingabe=new Scanner(System.in).nextInt();
            Mitarbeiter m = em.find(Mitarbeiter.class, eingabe);
            if(m == null)
                System.out.println("Witzbold");
            else{
                System.out.print("Neuer Name (alt:"+m.getName()+"): ");
                String name=new Scanner(System.in).next();
                EntityTransaction tr = em.getTransaction();
                tr.begin();
                m.setName(name);
                tr.commit();
            }
        }
    }
}
```


```
package kbs_prak6;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Mitarbeiter {
    @Id private int minr;
    private String name;
    public Mitarbeiter(){} //parameterloser Konstruktor benötigt
    public Mitarbeiter(int minr, String name) { //erlaubt
        this.minr = minr;
        this.name = name;
    }
    public int getMinr() {return minr;}
    public void setMinr(int minr) {this.minr = minr;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}
```

Er will in Zeile 24 den Funktionsaufruf "createQuery(java.lang.String qlString)" haben. Ich übergebe aber einen String und eine Klasse (Mitarbeiter). Wenn ich nun spaßeshalber die Klasse herausnehme, damit er wirklich nur den einen String bekommt, den er fordert, sie erhalte ich eine neue Fehlermeldung die mir sagt, dass er einen String und eine Klasse vom Typ Mitarbeiter erwartet.

Ich checks nicht ... Wo ist da der Fehler?

PS: Nutze Netbeans als Programmierumgebung und habe beim projekt auch die TopLink Essentials Library eingebunden.


----------



## Marcinek (10. Apr 2011)

Hallo,

1. das was hier vorher stand war dumm ^^

2. Ja du hast recht. In JDK 5.0 ist nur query(String) enthalten und in 6.0 die anderen überlagerten.

Du kannst JDK 6 runterladen und dann einfach nach c:\programme\java_6 kopieren.

deinem IDE sagst, dass es das benutzen soll. Das macht es leichter Programme auch in JDK 5.0 zu entwickeln.

Gruß,

Martin


----------



## mvitz (11. Apr 2011)

Es handelt sich hierbei nicht um Java sondern Java*EE*

Kenne mich leider nicht mit Netbeans aus, aber was für ein Projekt hast du angelegt und welche Bibliotheken (JARs) hast du mit im Projekt? Vermutlich reicht es von JPA 1.x auf JPA 2.x upzudaten.


----------

