jpa facade返回具有空值的实体

6yt4nkrj  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(198)

我有时会有一个非常奇怪的问题,如果我用jpa加载数据,即使数据库中有值,一些eneties也有空值。数据不是新创建的,也不是发生在每个记录上。唯一设置的值是主键
我在调查的时候找不到类似的东西
AbstractFacade.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();
    }
}

项目外观.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);
    }

}

这是导致问题的原因。

getItemFacade().findAll();

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题