您的位置:首页 > 数据库 > Oracle

Ebean/DB模拟Oracle序列生成ID

2018-01-02 14:59 579 查看
通过for update给ID表加一把锁,保证数据的一致性

public static Long genSeqId() {

Long newId = 0L;
String sql = "select seq_value from seq_table where seq_name = 'tbs_meminfo_id' for update";
EbeanServer server = Ebean.getServer("rds");
try {
server.beginTransaction();

SqlRow row = server.createSqlQuery(sql).findUnique();
Long oldId = row.getLong("seq_value");

sql = "update seq_table set seq_value = " + (oldId + 1) + " where seq_value = " + oldId + " and seq_name = 'tbs_meminfo_id'";
int result = server.createSqlUpdate(sql).execute();
if (result > 0) {
newId = oldId + 1;
}
} catch (Exception e) {
e.printStackTrace();
newId = -1L;
} finally {
server.commitTransaction();
}
return newId;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: