SSH主键冲突问题!

问题描述

系统用的是SSH框架:我系统登录、退出要写入数据库日志。有时候很偶然的在退出时写数据库日志报错。错误是日志表主键冲突,可怎么也想不明白为什么冲突。这时候再登陆也登陆不进去了,因为也要插入日志表,还是主键冲突。过10多分钟吧,才能正常登陆,退出也正常了。1.主键生成方式无论是native还是increament都会报相同的错误(偶尔)2.SSH集成了hibernate和Spring的JdbcTemplate,由Spring共同管理事务3.不知道是不是事务的问题,不过在系统其它地方操作数据库的地方没有发现这样的问题。配置代码:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="url" value="jdbc:oracle:thin:@192.168.1.10:1521:orcl"></property><property name="username" value="cmonitor"></property><property name="password" value="cmonitor"></property><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property><property name="maxActive" value="10"></property><property name="maxIdle" value="100"></property><property name="maxWait" value="10"></property><property name="defaultAutoCommit" value="true"></property></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop><prop key="hibernate.show_sql">false</prop></props></property><property name="mappingResources"><list><value></value></list></property></bean><bean id="JdbcTemplate" class ="org.springframework.jdbc.core.JdbcTemplate"> <property name ="dataSource" ref="dataSource"></property> </bean> <!--配置hibernate事务管理--><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property><property name="dataSource" ref="dataSource"></property></bean><tx:annotation-driven transaction-manager="transactionManager"/><bean id="txManager" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property></bean>

解决方案

最好在自己机器上debug一下,看看登录或是退出时生成的主键是否数据库里已经存在了。看看是不是其他地方约定了主键的生成。采用increament是不会出现上面的问题的。

时间: 2024-08-20 11:18:33

SSH主键冲突问题!的相关文章

生产环境mysql主主同步主键冲突处理

收到短信报警,两台数据库都报slave同步失败了,先说明一下环境,架构:lvs+keepalived+amoeba+mysql,主主复制,单台写入, 主1:192.168.0.223(写) 主2:192.168.0.230 好吧,先show slave status \G看一下同步失败的具体报错吧 登录主2库查看: mysql> show slave status \G *************************** 1. row ***************************

mysql 忽略主键冲突、避免重复插入的几种方式

mysql 忽略主键冲突.避免重复插入的几种方式 方案一:使用 ignore 关键字 方案二:使用 replace into 方案三:ON DUPLICATE KEY UPDATE  方案一:使用 ignore 关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999'),这

sqlserver2008触发器-SQL触发器进行更新操作时 用insert添加发生主键冲突

问题描述 SQL触发器进行更新操作时 用insert添加发生主键冲突 环境:SQLserver 2008 创建的表 --库存表(还有多少商品)ID 名称 库存数量 --销售表(卖了多少商品)ID 销售数量 create table StockInfo ( ProID int primary key identity(1,1), ProName nvarchar(20) not null, ProNumber int not null ) go create table SellTab--销售表

mybatis多线程批量插入MySQL报主键冲突

问题描述 mybatis多线程批量插入MySQL报主键冲突 insert into SMS_DOWN_HISTORY(templateCode,activityCode,activityId,sendRoundId,arrangeDate,expireDate,messageId,mobile,requestId,senderId,depName,depId,flag,level,smsTemplateVar,systemName,mtime,ctime) values (#{item.temp

主键冲突-对表做增删改查,在线等??

问题描述 对表做增删改查,在线等?? 对表做增删改查,为什么给表建个主键就报违反主键唯一性错误为什么? 解决方案 把图片或代码放上来看看 解决方案二: 违反主键唯一性错误,那是你已经设置了一个主键了,你看看你是不是默认设置了还是这个表示别的表的字表作为关联已经使用了 解决方案三: 你选择做主键的字段有重复的,删除重复的项,比如ID选为主键但是里面有两个ID相同的项就违反了主键的唯一性 解决方案四: 登录数据时发生主key冲突

mysql auto_increment 与 联合主键冲突问题

mysql 5.5之前,auto_increment字段必须为主键,有的时候,这种自增字段,并没有多大的实际意义,而我们需要多个字段组成主键. 例如: 用户只能对购买的商品,进行一次评价,评价的自增ID,没什么用处,用户的ID和商品ID组成的联合主键,意义就大的多了.如果想保留auto_increment字段,就要使用高版本的mysql了. mysql> ALTER TABLE `order` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `user_id` , `or

sql实现插入数据主键重复或数据已经存在,则更新这条数据

在做数据库开发的时候,经常会遇到这样的一种情景: 当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据. 你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则insert数据. 这样做的弊端就是需要两次连接数据库服务器,然后利用高级语言来判断是否存在的逻辑. 下面教你一条SQL语句,教你解决这类问题! 例如数据表weixin_user的表结构如下所示:(博客转移,图片丢失) $sql = "insert int

Hibernate主键生成策略总结(这里面讲的很详细)

 Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通过举例子来了解实体映射文件(*.hbm.xml)中对id生成策略配置格式     用户User的实体类User.java      [java] view plaincopyprint? package com.bjpowernode.hibernate;    import java.util.

请教:如何实现Oracle主键自增

问题描述 请问:如何实现Oracle主键自增(网络上有很多例子,很简单),但是我的问题是:如果id为1,2,...10,13,14,...50.(其中id=11,12)被删除了.oracle自增的时候会先用11,12,再用51,52,...吗?谢谢! 解决方案 解决方案二:不会,谢谢!直接用51,52...往下.解决方案三:不会那样,直接51,52,..解决方案四:主键应作为一个唯一标识符,并不需要具有业务含义,这才是正道!所以,主键只要唯一,不管当中跳了多少个都是没有问题的.解决方案五:主键好