Commit a70b45e6 authored by 雍欢's avatar 雍欢

获取序列的方法加锁

parent 7c4a22ae
package com.huigou.data.domain.listener; package com.huigou.data.domain.listener;
import com.huigou.data.query.executor.SQLExecutorDao; import com.huigou.data.repository.GeneralRepositorySuper;
import com.huigou.data.query.model.QueryDescriptor;
import com.huigou.domain.IdentifiedEntity; import com.huigou.domain.IdentifiedEntity;
import com.huigou.util.ApplicationContextWrapper; import com.huigou.util.ApplicationContextWrapper;
import org.springframework.beans.factory.annotation.Configurable; import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.util.ReflectionUtils;
import javax.persistence.PrePersist; import javax.persistence.PrePersist;
import javax.persistence.PreUpdate; import javax.persistence.PreUpdate;
import java.lang.reflect.Field;
@Configurable @Configurable
public class VersionListener { public class VersionListener {
@Deprecated @Deprecated
public final static String GET_NEXT_SEQ_SQL = "SELECT version_seq.nextval from DUAL"; public final static String GET_NEXT_SEQ_SQL = "SELECT version_seq.nextval from DUAL";
private final static String VERSION_FIELD_NAME = "version";
private Long getNextId() { private Long getNextId() {
SQLExecutorDao sqlExecutor = ApplicationContextWrapper.getBean("sqlExecutorDao", SQLExecutorDao.class); GeneralRepositorySuper generalRepository = ApplicationContextWrapper.getBean(GeneralRepositorySuper.class);
QueryDescriptor queryDescriptor = sqlExecutor.getQuery("config/uasp/query/bmp/common.xml", "common"); return generalRepository.getVersionNextId();
return sqlExecutor.getSqlQuery().getJDBCDao().queryToLong(String.format(queryDescriptor.getSqlByName("nextSequence"), "version_seq"));
} }
@PrePersist @PrePersist
public void beforeCreate(IdentifiedEntity target) { public void beforeCreate(Object target) {
target.setVersion(getNextId()); updateVersion(target);
} }
@PreUpdate @PreUpdate
public void beforeUpdate(IdentifiedEntity target) { public void beforeUpdate(Object target) {
target.setVersion(getNextId()); updateVersion(target);
}
private void updateVersion(Object target) {
if (target instanceof IdentifiedEntity) {
((IdentifiedEntity) target).setVersion(getNextId());
} else {
Field field = ReflectionUtils.findField(target.getClass(), VERSION_FIELD_NAME);
if (field != null) {
field.setAccessible(true);
ReflectionUtils.setField(field, target, getNextId());
}
}
} }
} }
...@@ -783,7 +783,7 @@ abstract public class GeneralRepositorySuper { ...@@ -783,7 +783,7 @@ abstract public class GeneralRepositorySuper {
query.executeUpdate(); query.executeUpdate();
} }
private long getNextId(String sequenceName) { private synchronized long getNextId(String sequenceName) {
SQLExecutorDao sqlExecutor = ApplicationContextWrapper.getBean("sqlExecutorDao", SQLExecutorDao.class); SQLExecutorDao sqlExecutor = ApplicationContextWrapper.getBean("sqlExecutorDao", SQLExecutorDao.class);
QueryDescriptor queryDescriptor = sqlExecutor.getQuery("config/uasp/query/bmp/common.xml", "common"); QueryDescriptor queryDescriptor = sqlExecutor.getQuery("config/uasp/query/bmp/common.xml", "common");
return sqlExecutor.getSqlQuery().getJDBCDao().queryToLong(String.format(queryDescriptor.getSqlByName("nextSequence"), sequenceName)); return sqlExecutor.getSqlQuery().getJDBCDao().queryToLong(String.format(queryDescriptor.getSqlByName("nextSequence"), sequenceName));
......
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