Java WinXP和Mac OS X中的MySql

Java WinXP和Mac OS X中的MySql,java,mysql,hibernate,macos,mysql-error-1062,Java,Mysql,Hibernate,Macos,Mysql Error 1062,我面临着这个奇怪的问题。 我在WinXP中在我的机器上编码,然后将所有代码移到MacOSX机器上。 使用XP机器上的JAR运行它。 我用java编写代码,并使用hibernate进行数据库处理 不知何故,我无法插入一行,而键是使用增量生成器类生成的。我也在Mac上尝试了本机但同样的错误 这里是调试模式。现在,我知道这是一个密钥冲突错误,但在WinXP中不会发生同样的错误。我在运行代码之前截断数据库。我认为它们在Mac中是某种生成器类依赖。还是别的罐子 以下是一些细节: Mac OS X 10.

我面临着这个奇怪的问题。 我在WinXP中在我的机器上编码,然后将所有代码移到MacOSX机器上。 使用XP机器上的JAR运行它。 我用java编写代码,并使用hibernate进行数据库处理

不知何故,我无法插入一行,而键是使用增量生成器类生成的。我也在Mac上尝试了本机但同样的错误

这里是调试模式。现在,我知道这是一个密钥冲突错误,但在WinXP中不会发生同样的错误。我在运行代码之前截断数据库。我认为它们在Mac中是某种生成器类依赖。还是别的罐子

以下是一些细节:

  • Mac OS X 10.5(x86_64)
  • MYSQL 5.1.35社区服务器
  • mysql-connector-java-5.1.7-bin.jar JDBC驱动程序
  • Java(TM)2运行时环境,标准版(build 1.5.0_16-b06-284)
  • Java HotSpot(TM)客户端虚拟机(构建1.5.0_16-133,混合模式,共享)
请告知
没有什么可以继续下去,但这就是我能理解的:

  • 违反的唯一键是标题和语言列上的组合键。(根据名称(Page_lang_title,其中lang_id和title_id是列名称)和stacktrace中显示的键的值(1-11266,实际上是两个值的组合)判断)
  • 维护页面(请求?)对wiki页面的计数。这当然容易出现并发问题,因为多个线程(请求)同时访问同一页面
  • 您可能正在执行批处理更新(或其他操作),并且您已经两次使用相同的组合。您的逻辑类似于“from Page where Page_id=?and lang_id=?”,因为您在同一事务中运行批处理并使用hibernate进行事务后同步,只有在提交事务后才处理表上的插入,因此您尝试插入两次相同的lang_id和Page_id组合
  • 现在,您可以做几件事:

  • 确保Hibernate的
    AUTO_FLUSH
    模式正常工作,以便在对该表进行查询之前,每当需要插入新实体时,都会刷新会话。要使其按预期工作,您必须确保Hibernate知道已启动的事务
  • 在使用Hibernate检查数据库之前,维护您为每个事务创建的Pagedatecount缓存,并查询它


  • 想想看:Pagedatecount实体不缺少日期列吗?它似乎没有被插入。

    我遇到了同样的问题。不知道你是否已经解决了。无论如何,在我的例子中,问题在于MySQL如何创建表和执行表名比较。在MacOsX上,我必须将“lower_case_table_names”MySQL变量设置为1(默认为0),这是使用InnoDB时的建议值。这就解决了我的问题(正如你所说,Hibernate似乎没有接收到自动生成的ID)

    希望这能有所帮助,
    Riccardo.

    您在Mac OS X上使用的JVM是什么?MySQL服务器和JDBC驱动程序是什么版本?当版本不匹配时,我看到了奇怪的错误。我的MYSQL版本是服务器版本:5.1.35 MYSQL社区服务器(GPL),JDBC驱动程序是MYSQL-connector-java-5.1.7-bin.jar,最后是java(TM)2运行时环境,标准版(build 1.5.0_16-b06-284)java热点(TM)客户端虚拟机(build 1.5.0_16-133,混合模式,共享)另外,MAC是MAC OS X 10.5(x86_64)您可以发布您的hibernate.xml吗?
    2009-06-20 18:43:01,230 DEBUG [org.hibernate.type.IntegerType] - binding '11266' to parameter: 2
    2009-06-20 18:43:01,230 DEBUG [org.hibernate.type.IntegerType] - binding '332' to parameter: 3
    2009-06-20 18:43:01,281 DEBUG [org.hibernate.type.IntegerType] - binding '6' to parameter: 4
    2009-06-20 18:43:01,281 DEBUG [org.hibernate.persister.entity.AbstractEntityPersister] - Inserting entity: [org.joshua.hibernate.dto.Pagedatecounts#289]
    2009-06-20 18:43:01,281 DEBUG [org.hibernate.jdbc.AbstractBatcher] - Executing batch size: 1
    2009-06-20 18:43:01,288 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    2009-06-20 18:43:01,288 DEBUG [org.hibernate.jdbc.AbstractBatcher] - closing statement
    2009-06-20 18:43:01,289 DEBUG [org.hibernate.util.JDBCExceptionReporter] - Could not execute JDBC batch update [insert into wiki.page (langId, titleId, totalCounts, id) values (?, ?, ?, ?)]
    java.sql.BatchUpdateException: Duplicate entry '1-11266' for key 'Page_lang_title'
        at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1693)
        at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1108)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
        at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
        at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.joshua.hibernate.dao.PageDAO.batchSave(PageDAO.java:70)
        at org.joshua.businesservice.PageServiceImpl.savePageDateCountBatch(PageServiceImpl.java:61)
        at org.joshua.wikidumps.DumpHandler.endElement(DumpHandler.java:192)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:176)
        at org.joshua.wikidumps.PagesByNumberOfRecentEdits.execute(PagesByNumberOfRecentEdits.java:107)
        at org.joshua.wikidumps.PagesByNumberOfRecentEdits_ur.main(PagesByNumberOfRecentEdits_ur.java:19)
    2009-06-20 18:43:01,290 WARN [org.hibernate.util.JDBCExceptionReporter] - SQL Error: 1062, SQLState: 23000
    2009-06-20 18:43:01,290 ERROR [org.hibernate.util.JDBCExceptionReporter] - Duplicate entry '1-11266' for key 'Page_lang_title'
    2009-06-20 18:43:01,290 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] - Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update