Я использую 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);
}
}