
sf.database.meta.OptimisticLock Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sorm Show documentation
Show all versions of sorm Show documentation
java jpa tool for spring
The newest version!
package sf.database.meta;
import sf.core.DBField;
import sf.core.DBObject;
import sf.database.dao.DBContext;
import sf.database.dialect.DBDialect;
import sf.database.jdbc.sql.Crud;
import sf.database.jdbc.sql.SQLContext;
import sf.database.jdbc.sql.SQLParameter;
import sf.database.util.DBUtils;
import sf.database.util.OrmUtils;
import sf.database.util.OrmValueUtils;
import sf.database.util.SQLUtils;
import sf.spring.util.CollectionUtils;
import sf.tools.StringUtils;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 乐观锁支持
* @see javax.persistence.Version
*/
public class OptimisticLock {
/**
* @param conn
* @param obj
* @param
* @see javax.persistence.Version
* 从数据库中获取最新的乐观锁的值到对象中,一般情况下,该方法用不到.慎用.
*/
public static void setNewOptimisticLockValues(Connection conn, T obj) {
TableMapping table = MetaHolder.getMeta(obj.getClass());
DBDialect dialect = DBUtils.doGetDialect(conn, false);
DBContext dbContext = DBUtils.doGetDBContext(conn);
List fStr = new ArrayList<>();
if (!CollectionUtils.isEmpty(table.getVersionMap())) {
for (Map.Entry e : table.getVersionMap().entrySet()) {
ColumnMapping cm = e.getValue();
String columnName = cm.getRawColumnName();
fStr.add(dialect.wrapKeyword(columnName));
}
String tableName = dialect.wrapKeyword(OrmUtils.getDynamicTableName(dbContext, table));
SQLContext c = new SQLContext(table);
List pKeys = table.getPkFields();
List parameters = new ArrayList<>();
StringBuilder sql = new StringBuilder();
sql.append("select ").append(StringUtils.join(fStr, ",")).append(" from ").append(tableName);
boolean f = false;
for (ColumnMapping pk : pKeys) {
sql.append(f ? " and " : " where ").append(dialect.wrapKeyword(pk.getRawColumnName())).append(" = ").append(SQLUtils.placeholder());
Object value = OrmValueUtils.getValue(obj, pk);
parameters.add(new SQLParameter(value, pk));
f = true;
}
c.setSql(sql.toString());
c.setParas(parameters);
DBObject temp = Crud.getInstance().getCrudModel().selectOne(conn, obj.getClass(), c);
if (temp != null) {
//设置最新的版本值到obj对象中
for (Map.Entry e : table.getVersionMap().entrySet()) {
ColumnMapping cm = e.getValue();
Object value = OrmValueUtils.getValue(temp, cm);
OrmValueUtils.setValue(obj,cm,value);
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy