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

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

parent f4f2ce09
package com.huigou.data.domain.service; 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.context.MessageSourceContext;
import com.huigou.data.domain.EntityUtil; import com.huigou.data.domain.EntityUtil;
import com.huigou.data.domain.model.AbstractEntity; import com.huigou.data.domain.model.*;
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.query.CheckBaseInfoDuplicateParameter; import com.huigou.data.domain.query.CheckBaseInfoDuplicateParameter;
import com.huigou.data.domain.query.QueryParameter; import com.huigou.data.domain.query.QueryParameter;
import com.huigou.data.query.executor.SQLExecutorDao; import com.huigou.data.query.executor.SQLExecutorDao;
...@@ -31,6 +10,18 @@ import com.huigou.data.query.model.QueryDescriptor; ...@@ -31,6 +10,18 @@ import com.huigou.data.query.model.QueryDescriptor;
import com.huigou.data.repository.GeneralRepositorySuper; import com.huigou.data.repository.GeneralRepositorySuper;
import com.huigou.domain.IdentifiedEntity; import com.huigou.domain.IdentifiedEntity;
import com.huigou.util.StringUtil; 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 { ...@@ -290,16 +281,23 @@ public class CommonDomainService {
public void updateStatus(Class<? extends AbstractEntity> clazz, String id, Integer status) { public void updateStatus(Class<? extends AbstractEntity> clazz, String id, Integer status) {
Assert.notNull(id, MessageSourceContext.getMessage(MessageConstants.ID_NOT_BLANK)); Assert.notNull(id, MessageSourceContext.getMessage(MessageConstants.ID_NOT_BLANK));
Assert.notNull(status, MessageSourceContext.getMessage(MessageConstants.STATUS_NOT_BLANK)); Assert.notNull(status, MessageSourceContext.getMessage(MessageConstants.STATUS_NOT_BLANK));
String jpql = new StringBuilder("update ")
String tableName = EntityUtil.getTableName(clazz); .append(clazz.getName())
String jpql = this.getSqlByName("updateStatusSql"); .append(" set ")
jpql = String.format(jpql, tableName); .append(CommonDomainConstants.STATUS_FIELD_NAME)
.append("=:status")
Map<String, Object> parameterMap = new HashMap<String, Object>(2); .append(",version=:version")
parameterMap.put(CommonDomainConstants.STATUS_FIELD_NAME, status); .append(" where ")
parameterMap.put(CommonDomainConstants.ID_FIELD_NAME, id); .append(CommonDomainConstants.ID_FIELD_NAME)
.append("=:id")
this.generalRepository.updateByNativeSql(jpql, parameterMap); .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) { 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