我原先用的oracle的数据库,初始化后,没有错误。但是因为各种原因,我现在把数据库改成了mysql,至此,只是修改了一下了一下项目名称,hibernate.cfg.xml还有build.xml中的关于数据库连接的一些设置,然后拷贝进来了mysql的驱动包,
做完权限管理进行初始化的时候老是报错;如下:(主键用的native,程序中没有乱码)Hibernate: insert into T_Module (name, sn, url, orderNo, parentId) values (?, ?, ?, ?, ?)
10:30:10,828  INFO InitSystemDatasImpl:68 - 导入模块【个人办公】
Hibernate: insert into T_Module (name, sn, url, orderNo, parentId) values (?, ?, ?, ?, ?)
10:30:10,828  INFO InitSystemDatasImpl:68 - 导入模块【我的办公桌】
Hibernate: insert into T_Module (name, sn, url, orderNo, parentId) values (?, ?, ?, ?, ?)
10:30:10,828  WARN JDBCExceptionReporter:71 - SQL Error: 1062, SQLState: 23000
10:30:10,828 ERROR JDBCExceptionReporter:72 - Duplicate entry '????' for key 'name'
org.springframework.dao.DataIntegrityViolationException: could not insert: [com.djrj.oa.model.Module]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.djrj.oa.model.Module]
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.djrj.oa.model.Module]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2093)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2573)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:47)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:625)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:622)
at com.djrj.oa.manager.impl.InitSystemDatasImpl.importModules(InitSystemDatasImpl.java:67)
at com.djrj.oa.manager.impl.InitSystemDatasImpl.importModules(InitSystemDatasImpl.java:69)
at com.djrj.oa.manager.impl.InitSystemDatasImpl.addOrUpdateInitDatas(InitSystemDatasImpl.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy7.addOrUpdateInitDatas(Unknown Source)
at manager.InitSystemDatasTest.testAddOrUpdateInitDatas(InitSystemDatasTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.sql.SQLException: Duplicate entry '????' for key 'name'
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1125)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:677)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1357)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1274)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1259)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
... 49 more

解决方案 »

  1.   

    Caused by: java.sql.SQLException: Duplicate entry '????' for key 'name' 
    是不是主键重复了????
      

  2.   

    插入了重复的记录。
    检查下这个表T_Module 的插入sql
      

  3.   

    Duplicate entry '????' for key 'name' 
    怀疑是mysql的字符集不对,导致中文变乱码,你在name上有唯一索引,而所有中文都变????后,数据库认为是相同的。改下你的数据库编码至UTF-8
      

  4.   

    Caused by: java.sql.SQLException: Duplicate entry '????' for key 'name' 
    重复插入?  试试这个
      

  5.   

    我的插入都是用的,解析完xml文件后。直接对象插入的啊、在用ORACLE数据库就没有问题,改成MYSQL就有问题啦,真奇怪了
      

  6.   

    我的也是这种问题
    我把数据库编码改成UTF-8
    然后运行
    重新插入数据  网上搜的到数据库的插入文件,不过每个表也要改成UTF-8才显示
    我的好了