EJB AbstractFacade: cannot find getCriteriaBuilder()

J2EE, JSP, JSF, VisualWeb-Pack usw.

Moderator: wegus

Anachrophobia
Beiträge: 4
Registriert: 05.07.2010, 19:00

EJB AbstractFacade: cannot find getCriteriaBuilder()

Beitragvon Anachrophobia » 05.07.2010, 19:33

Hallo und guten Abend an alle Experten,

wieder mal ein NetBeans Neuling der Hilfe sucht. Mehrere Stunden suche ich nun schon nach einer Lösung...
Vorab, meine Version von Netbeans ist 6.9, ich nutze den internen glassfish Server 3.0.1. Ca. vor einer Woche runtergeladen das alles.

Ich schreibe gerade an einem Projekt und will die Datenbankanbindung über Enterprise Java Beans realisieren. Ich habe mir also ein Entity erstellt, und dann über den Wizard folgendes gemacht: New/Session Beans for Entity Classes. Im Formular habe ich dann die Entity-Klasse ausgewählt und bei "Create Interfaces" nur "Remote" angewählt.
Darauf kreiert mir der Wizard gesamt 3 Java-Klassen, <EntityName>Facade, <EntityName>FacadeRemote und die problematische AbstractFacade.
(<EntityName> steht hier für den Namen der Entity-Klasse.)
Das mit der AbstractFacade macht NetBeans offenbar erst seit Versionssprung 6.8 auf 6.9. Dort sind die Methoden implementiert, die im Interface <EntityName>FacadeRemote gefordert werden, und die Klasse <EntityName>Facade erbt von AbstractFacade.

Allerdings bringt NetBeans mehrere Fehlermeldungen bei der unveränderten (!) AbstractFacade, frisch vom Wizard erzeugt. Offenbar findet er eine Methode nicht - laut API müsste die aber mit den Importen dabei sein.

Die genauen Fehlermeldungen:

cannot find symbol
symbol: method getCriteriaBuilder()
location: interface javax.persistence.EntityManager


method createQuery in interface javax.persistence.EntityManager cannot be applied to given types
required: java.lang.String
found: javax.persistence.criteria.CriteriaQuery


Hier noch der Code der AbstractFacade - man sieht, eigentlich wird persistence.EntityManager importiert, laut API (http://javadoc.glassfish.org/v3/apidoc/javax/persistence/EntityManager.html), wenn ch das richtig sehe, müsste das ganze auch da sein.

Ich habe die Zeilen mit Fehler 1 mit !!! und für Fehler 2 mit ??? markiert!

Code: Alles auswählen

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejb;

import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author Alex
 */
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
!!!        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
???        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
!!!        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
???        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
!!!        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
!!!        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
???        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }

}



Bitte entschuldigt meine vielleicht unprofessionelle Ausdrucksweise!
Kann mir vielleicht irgendwer weiterhelfen? Was mache ich falsch? Ich verzweifle noch daran... :|
Meinen größten Dank schonmal im Voraus!!

Alex

Zurück zu „NetBeans - Enterprise“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste