Search code examples
jpa

EntityManager" is null in JPA


persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="3.0" xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
    <persistence-unit name="filePU" transaction-type="JTA">
        <jta-data-source>jdbc/file</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="jakarta.persistence.schema-generation.database.action" value="create"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/file"/>
            <property name="jakarta.persistence.jdbc.user" value="postgres"/>
            <property name="jakarta.persistence.jdbc.password" value="12345"/>
            <property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

Bean class

import dao.FileDAO;
import entity.Filee;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;
import jakarta.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.nio.file.Files;
import java.util.List;



@Named
@SessionScoped
public class FileManager implements Serializable{
    
    private Filee file;
    
    private FileDAO fdao;
    private List<Filee> list;
    private Part doc;
    
    private String uploadTo="C:\\files\\";
    
    public void upload() {
    try {
        InputStream input = doc.getInputStream();
        File f = new File(uploadTo + doc.getSubmittedFileName());
        Files.copy(input, f.toPath());

        Filee newFile = new Filee();
        newFile.setPath(f.getParent());
        newFile.setName(f.getName());
        newFile.setType(doc.getContentType());

        

        getFdao().create(newFile);

    } catch (IOException e) {
        System.out.println( e.getMessage());
    }
}

AbstractDao


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


public abstract class AbstractFacade<T> implements Serializable{
    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] + 1);
        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();
    }
    
}

FileDAO

import entity.Filee;
import jakarta.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class FileDAO extends AbstractFacade<Filee> {

 
    @PersistenceContext(unitName = "filePU")
    private EntityManager em;

    public FileDAO() {
        super(Filee.class);
    }

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
}

I want to use jpa in my Java jsf project but I get an error.

When I run this code I get entitymenager null error. how can I solve this error. eror message: Cannot invoke "javax.persistence.EntityManager.getCriteriaBuilder()" because the return value of "dao.AbstractFacade.getEntityManager()" is null


Solution

  •   @EJB FileDAO fileDao;
    

    It worked when I edited it this way