JPA Facade returning entity with null values

Viewed 179

I have a really strange sometimes if I load my data with JPA some enetities have null values even if there are values in the database. The data is not newly created and it's not happening to every record. The only value which is set is the primary key

I coulnd't find anything similar while researching

AbstarctFacade.java

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

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 void detach(T entity) {
        getEntityManager().detach(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();
    }
}

ItemFacade.java

import ch.itwork.map.core.util.AbstractFacade;
import javax.ejb.Stateless;
import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class ItemFacade extends AbstractFacade<Item> {

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

    @Override
    protected EntityManager getEntityManager() {
        em.clear();
        Cache cache = em.getEntityManagerFactory().getCache();
        cache.evict(Item.class);
        return em;
    }
    
    public void clearCache() {
        em.clear();
        Cache cache = em.getEntityManagerFactory().getCache();
        cache.evict(Item.class);
    }

    public ItemFacade() {
        super(Item.class);
    }
    
}

This is the call which causes the problem.

getItemFacade().findAll();
0 Answers
Related