2
我與實體管理器有問題。我想在一個數據庫中插入大約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(),都沒關係。
我用:
Glassfish的:3.1.2.2
JPA提供商:的EclipseLink 2.5,JPA 2.1
的PostgreSQL 9.1
JDK 1.7
怎麼能這樣呢?
是什麼意思_but我不要在列表中獲得全部4182個元素? – perissf