请教一个关于Spring的事务的问题。
请教一个关于Spring的事务的问题。
下面这段代码放到多线程里,为什么会出现“主键重复”异常?
也就是这段代码并没有作为一段原子代码块运行。
@Transactional
private void UpdateServerDiskData(List<Data> datas){
	try
	{    		
		this.serverDiskDao.DeleteAllData();    		
		for(Data data : datas  ){
			this.dao.InsertData(data);    		
		}
	}catch(Exception e){
		e.printStackTrace();    		
	}
}
用下面这样同步就没问题:
@Transactional
private void UpdateServerDiskData(List<Data> datas){
	try
	{    		
		synchronized(lockObj){
			this.serverDiskDao.DeleteAllData();    		
			for(Data data : datas  ){
				this.dao.InsertData(data);    		
			}
		}
	}catch(Exception e){
		e.printStackTrace();    		
	}
}
------解决方案--------------------@Transactional 只针对 public方法起作用
------解决方案--------------------2楼正解,你的事物注解没起作用,你改成public去掉同步关键字就不会出现了
------解决方案--------------------
不一定吧, 它这里的@Transactional 不起作用,不代表这个方法没有事务,它如果运行在其它事务方法中也一样可以保存数据。
所以不太清楚楼主是什么问题
------解决方案--------------------
恩,的确,疏忽了,只是@transaction没气作用