Commit 439659b0 authored by 雍欢's avatar 雍欢

CommonDomainService.updateStatus 使用jpa的方式修改实体状态,从而避免在MySQL数据库下面出现竞争version表

parent f4f2ce09
package com.huigou.data.domain.service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import com.huigou.context.MessageSourceContext;
import com.huigou.data.domain.EntityUtil;
import com.huigou.data.domain.model.AbstractEntity;
import com.huigou.data.domain.model.BaseInfoAbstractEntity;
import com.huigou.data.domain.model.BaseInfoStatus;
import com.huigou.data.domain.model.BaseInfoWithFolderAbstractEntity;
import com.huigou.data.domain.model.CommonDomainConstants;
import com.huigou.data.domain.model.FlowBillAbstractEntity;
import com.huigou.data.domain.model.MessageConstants;
import com.huigou.data.domain.model.TreeEntity;
import com.huigou.data.domain.model.*;
import com.huigou.data.domain.query.CheckBaseInfoDuplicateParameter;
import com.huigou.data.domain.query.QueryParameter;
import com.huigou.data.query.executor.SQLExecutorDao;
......@@ -31,6 +10,18 @@ import com.huigou.data.query.model.QueryDescriptor;
import com.huigou.data.repository.GeneralRepositorySuper;
import com.huigou.domain.IdentifiedEntity;
import com.huigou.util.StringUtil;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 通用领域服务
......@@ -290,16 +281,23 @@ public class CommonDomainService {
public void updateStatus(Class<? extends AbstractEntity> clazz, String id, Integer status) {
Assert.notNull(id, MessageSourceContext.getMessage(MessageConstants.ID_NOT_BLANK));
Assert.notNull(status, MessageSourceContext.getMessage(MessageConstants.STATUS_NOT_BLANK));
String tableName = EntityUtil.getTableName(clazz);
String jpql = this.getSqlByName("updateStatusSql");
jpql = String.format(jpql, tableName);
Map<String, Object> parameterMap = new HashMap<String, Object>(2);
parameterMap.put(CommonDomainConstants.STATUS_FIELD_NAME, status);
parameterMap.put(CommonDomainConstants.ID_FIELD_NAME, id);
this.generalRepository.updateByNativeSql(jpql, parameterMap);
String jpql = new StringBuilder("update ")
.append(clazz.getName())
.append(" set ")
.append(CommonDomainConstants.STATUS_FIELD_NAME)
.append("=:status")
.append(",version=:version")
.append(" where ")
.append(CommonDomainConstants.ID_FIELD_NAME)
.append("=:id")
.toString();
int affectedRows = this.generalRepository.getEntityManager()
.createQuery(jpql)
.setParameter("status", status)
.setParameter("version", generalRepository.getVersionNextId())
.setParameter("id", id)
.executeUpdate();
Assert.isTrue(affectedRows <= 1, String.format("根据主键修改状态出错,匹配到 %d 条数据", affectedRows));
}
public void updateChildenFullName(Class<? extends AbstractEntity> clazz, String fullId, String oldFullName, String newFullName) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment