entityManager Данные часто менялись - PullRequest
0 голосов
/ 31 января 2019

Я использую entityManager для работы с базой данных.Но в моем проекте у меня возникает такая проблема: когда я обновляю данные, затем нахожу страницу, чтобы показать данные.Я получил данные были обновлены до или обновить после.два состояния были появляться попеременно.Как я могу исправить эту проблему?

У меня есть изменение набора данных источника spring.jpa.properties.hibernate.connection.isolation = 2 entityManager.createQuery (critQuery) .setFlushMode (FlushModeType.COMMIT);

public abstract class BaseDaoImpl<T extends BaseEntity<ID>, ID extends Serializable> implements BaseDao<T, ID> {

@PersistenceContext
protected EntityManager entityManager;

public void persist(T entity) {
   Assert.notNull(entity);
   entityManager.persist(entity);
}

public T merge(T entity) {
    Assert.notNull(entity);
    return entityManager.merge(entity);
}

protected Page<T> findPage(CriteriaQuery<T> criteriaQuery, Pageable pageable) {
    Assert.notNull(criteriaQuery);
    Assert.notNull(criteriaQuery.getSelection());
    Assert.notEmpty(criteriaQuery.getRoots());
    if (pageable == null) {
        pageable = new Pageable();
    }
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        Root<T> root = getRoot(criteriaQuery);
        addRestrictions(criteriaQuery, pageable);
        addOrders(criteriaQuery, pageable);
        if (criteriaQuery.getOrderList().isEmpty()) {
            if (OrderEntity.class.isAssignableFrom(entityClass)) {
                criteriaQuery.orderBy(criteriaBuilder.asc(root.get(OrderEntity.ORDER_PROPERTY_NAME)));
            } else if (BaseEntity.class.isAssignableFrom(entityClass)) {
                criteriaQuery.orderBy(criteriaBuilder.desc(root.get(BaseEntity.CREATE_DATE_PROPERTY_NAME)));
            }
        }

        long total = 0;
        // TODO 分组之后记录总数
        if (!pageable.getGroupby()) {
            total = count(criteriaQuery, null);
        }
        int totalPages = (int) Math.ceil((double) total / (double) pageable.getPageSize());
        if (totalPages < pageable.getPageNumber()) {
            pageable.setPageNumber(totalPages);
        }
        TypedQuery<T> query = entityManager.createQuery(criteriaQuery).setFlushMode(FlushModeType.COMMIT);
        query.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.setMaxResults(pageable.getPageSize());
        return new Page<T>(query.getResultList(), total, pageable);
    }
}
...