【问题标题】:Entity Manager doesn't return all elements like inserted实体管理器不返回所有元素,如插入
【发布时间】:2013-10-10 14:37:28
【问题描述】:

我的实体管理器有问题。我想在一个数据库中插入大约 4000 个对象。在插入语句之后,我希望所有元素都返回以进行进一步处理。问题是我只取回了 1700 个对象。

这是服务:

public void addAllElementsToDatabase() {

    System.out.println("### listObjects: " + listObjects.size());

    for (Object object : listObjects) {
        objectDAO.create(object);
        // objectDAO.edit(object);
    }

    System.out.println("### listObjects after: " + objectDAO.findAll().size());
    System.out.println("### count rows: " + objectDAO.count());
}

ObjectDAO 从 GenericDAO 扩展而来。 GenericDAO 看起来像:

private Class<T> entityClass;

public GenericDAO(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 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();
}

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

输出:

INFO: ### listObjects: 4182
INFO: ### listObjects after: 1711
INFO: ### count rows: 4182

pgAdmin3 还显示了 4182 行。如果我在控制台中使用 SQL 语句计算行数,我也会得到数字 4182,但我没有得到列表中的所有 4182 个元素。使用edit()还是create()都没有关系。

我用:

玻璃鱼:3.1.2.2

JPA 提供者:EclipseLink 2.5、JPA 2.1

PostgreSQL 9.1

JDK 1.7

这怎么可能?

【问题讨论】:

  • 这是什么意思但我没有得到一个列表中的所有 4182 个元素?

标签: java postgresql entitymanager


【解决方案1】:

问题是我的映射中的 FetchType:

@JoinFetch(value = JoinFetchType.INNER)

我预计该值不能为空/ 0,所以 FetchType.OUTER 解决了这个问题:

@JoinFetch(value = JoinFetchType.OUTER)

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2011-08-09
    • 2023-03-23
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多