`
ycljf86
  • 浏览: 74181 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

改DB的结构(由非自动增长改为自动增长)

阅读更多
hibernate 的自动生成主键策略,increment,这个是严重不建议在集群环境下使用的。他是直接用在程序中max函数来生成,这里有两台web server,那么就容易出现插入相同值的问题,更要命的是,我们的项目中也用到了hinernate的二级缓存和查询缓存,那么serverA更新了数据库后,是不会通知serverB的,由于缓存那么serverB不是从数据库中select max的,而是直接从缓存中取出最近一次他自己认为是最新的那条然后加1.那么肯定会出现主键相同的情况了。无论你是不是一起点save按钮,解决的方案:

1 每次save时清空二级缓存的这个类。当然这样要是并发起来,一样是有可能出现问题的。他只是保证每次都到数据库中捞新的记录(sessionFactory.evit(class))
2 写SQL改表的结构。自增长。对应的hbm.xml改为native。下面就是项目中改表的SQl。改表的思路是这样的:
删除外键-->删除主键和约束-->创建临时表(结构和原表一样,主键设为自增长)-->赋值原表内容到临时表-->删除原表-->改临时表的名字为原表-->添加主键和约束-->添加外键。

这里要最后记住主键。外键。约束的名字。
以上都是用sql完成的。没有人工干预。

下面附上一段完整的sql代码:
分享到:
评论

相关推荐

    程序员的SQL金典6-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典7-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典3-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典4-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典.rar

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    数据库管理系统SQL-Server.doc

    数据库管理系统SQL Server...每次SQL Server启动时它会自动重建并重设为默认大小,使用中它会依需自动增长; e) Northwind数据库:是SQL Server提供的范例数据库,包含一个称为Nortwind Trader公司的销售数据库; f) Pub

    最全的oracle常用命令大全.txt

    su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=...

    orcale常用命令

    c、显示表结构命令DESCRIBE SQL>DESC 表名 d、SQL*Plus中的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令 首先要将待改正行变为当前行 SQL>n 用CHANGE命令修改内容 SQL>c/旧/新 重新确认是否已正确 SQL>L 使用...

    Oracle数据库管理员技术指南

    7.9.2 非活动的重做日志组丢失 7.9.3 活动重做日志组丢失 7.10 恢复丢失的控制文件 7.10.1 被复用的控制文件成员丢失 7.10.2 控制文件完全丢失 7.11 回顾 第8章 性能优化 8.1 优化系统全局区域的技术 8.1.1 ...

    Oracle9i的init.ora参数中文说明

    说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交...

    印染厂生产仓储信息系统

    内部的局域网网速:局域网线路带宽为100M,工作站要求10M/100M,DB服务器为100M/1000M。 客户机(浏览器)外部接入网速不低于256kbps 2、服务器要求: DB服务器要求为高性能的PC服务器,配置最低要求(5个客户端):...

    ORACLE9i_优化设计与系统调整

    §10.7 哪种类型的表设为cache 方式 116 §10.8 数据表和索引分开原则 116 §10.9 是否采用簇和分区 116 §10.10 表和索引的空间预分配 116 §10.11 确定数据库对象存储大小 117 §10.11.1 非簇表的大小计算 117 §...

    大智慧股票本地数据读取接口(含源码)

    14 - 17 DB 17 00 00 未知 int当前最后空块号 18 - 21 31 41 30 30 30...FF 证券代码 byte[10] 22 - 25 B0 09 00 00 日线记录数 int 26 - 57 00 00 25 04...FF FF 记录块号 char[25] ...... 记录块开始于0x41000 ...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    5.5.7 SEARCHB——以字节为单位不区分大小写地查找指定字符的位置 191 5.5.8 SUBSTITUTE——以指定文本进行替换 191 5.6 删除文本中的字符 192 5.6.1 CLEAN——删除无法打印的字符 192 5.6.2 TRIM——删除多余...

    经典SQL语句大全

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:select top 0 * into b from a 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:...

    数据库操作语句大全(sql)

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:select top 0 * into b from a 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:...

    sql经典语句一部分

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:select top 0 * into b from a 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:...

Global site tag (gtag.js) - Google Analytics