2017-04-07 157 views
0

我知道这个问题已经在各种问题中对待,并在我看来,在HERE答案似乎是合乎逻辑的解决方案,但对我来说,它以某种方式没有帮助。 保存或仅更新某个实体时发生错误。有了它的工作原理很奇怪\ OO所有其他/休眠4.3.11与c3p0 0.9.5.2 setCharacterStream导致AbstractMethodError

这里是我的堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError 
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(JtdsPreparedStatement.java:1274) 
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setCharacterStream(NewProxyPreparedStatement.java:956) 
at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$4$1.doBind(ClobTypeDescriptor.java:124) 
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281) 
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67) 
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:616) 
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1901) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) 
at org.hibernate.loader.Loader.doQuery(Loader.java:910) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) 
at org.hibernate.loader.Loader.doList(Loader.java:2554) 
at org.hibernate.loader.Loader.doList(Loader.java:2540) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) 
at org.hibernate.loader.Loader.list(Loader.java:2365) 
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) 
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) 
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
at my.software..persistent.hibernate.dao.LanguageTextDaoHibernate.getLanguageKey(LanguageTextDaoHibernate.java:241) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
at com.sun.proxy.$Proxy83.getLanguageKey(Unknown Source) 
at my.software..util.language.LanguageTextUtil.getLanguageKey(LanguageTextUtil.java:125) 
at my.software..propertysheet.TextProperties.setLanguageText(TextProperties.java:505) 
at my.software..gui.dialog.spm.TextProducerDialog.buttonGetValues_actionPerformed(TextProducerDialog.java:296) 
at my.software..gui.dialog.spm.TextProducerDialog.access$1(TextProducerDialog.java:279) 
at my.software..gui.dialog.spm.TextProducerDialog$2.actionPerformed(TextProducerDialog.java:201) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6516) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6281) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4872) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 
at java.awt.EventQueue.access$300(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:706) 
at java.awt.EventQueue$3.run(EventQueue.java:704) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:720) 
at java.awt.EventQueue$4.run(EventQueue.java:718) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) 
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) 
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) 
at java.awt.Dialog.show(Dialog.java:1082) 
at java.awt.Component.show(Component.java:1655) 
at java.awt.Component.setVisible(Component.java:1607) 
at java.awt.Window.setVisible(Window.java:1014) 
at java.awt.Dialog.setVisible(Dialog.java:1005) 
at com.still.common.gui.dialog.DialogTemplate.createDialog(DialogTemplate.java:168) 
at my.software..gui.dialog.spm.TextProducerDialog.init(TextProducerDialog.java:262) 
at my.software..gui.dialog.spm.TextProducerDialog.<init>(TextProducerDialog.java:126) 
at my.software..gui.action.spm.SpmTextAction.getActionNew(SpmTextAction.java:44) 
at my.software..gui.toolbar.spm.SpmTextToolBar$3.actionPerformed(SpmTextToolBar.java:120) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) 
at java.awt.Component.processMouseEvent(Component.java:6516) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6281) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4872) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 
at java.awt.EventQueue.access$300(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:706) 
at java.awt.EventQueue$3.run(EventQueue.java:704) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:720) 
at java.awt.EventQueue$4.run(EventQueue.java:718) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

当我加载应用程序的C3P0日志:

INFO [main] 07.04.17 14:37:17.389 [email protected]: Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10] 
INFO [main] 07.04.17 14:37:17.814 [email protected]: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 2wu2r69nk3dcuwd4fg5w|1a4bd3d, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.hsqldb.jdbcDriver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 2wu2r69nk3dcuwd4fg5w|1a4bd3d, idleConnectionTestPeriod -> 0, initialPoolSize -> 10, jdbcUrl -> jdbc:jtds:sqlserver://derlkim0425:1433/spm_dev_mirco, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 120, maxStatements -> 70, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ] 

这是我的pom.xml片段(我必须将c3p0从hibernate-c3p0中排除,因为它正在加载与JDBC4驱动程序不兼容的旧版本)

<!-- Hibernate Stuff --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.11.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.5.6-Final</version> 
    <!-- Hibernate Core needs a higher version so we exclude this one --> 
     <exclusions> 
      <exclusion> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-commons-annotations</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>3.1.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.11.Final</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>c3p0</artifactId> 
       <groupId>c3p0</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>com.mchange</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.5.2</version> 
    </dependency> 

我很无能在现在寻找根本原因...... 这可能与LanguageText实体类中的某些JPA配置有关吗? 没有什么幻想,在那里,虽然...

感谢有这方面的提示。

+0

我刚刚意识到,看来我的项目没有使用JDBC4。它打印这个日志'INFO [main] 07.04.17 15:19:11.978 [email protected]alLobCreation:HHH000423:禁用上下文LOB创建作为JDBC驱动器报告JDBC版本[3]小于4' 。但是Spring 4.3.11应该使用JDBC4 ......现在我更加困惑了 – m0rb

+0

它与Spring和C3P0没有任何关系......您使用的驱动程序是一个JDBC3驱动程序而不是JDBC4驱动程序(它也明确声明在[网站](http://jtds.sourceforge.net))。你也应该删除'hibernate-annotations'依赖项,因为它应该被核心包含(或管理)。 –

+0

@ M.Deinum感谢您的回复。由于我正在开发的应用程序非常陈旧,因此需要重新构建新技术,我有很多工作要做。有没有办法从JTDS转到某种程度?用JDBC4没有任何问题?我尝试了微软的原始sqljdbc驱动程序,但是后来有一半的HQL语句给我提供了像'从nvarchar到clob不可能转换'的错误。任何想法在这里都有一个好的方法?为什么没有使用JDBC4的JTDS的后继者? – m0rb

回答

0

所以我终于知道我的问题是什么,像往常一样坐在椅子和屏幕之间。 setCharacterStream方法问题已通过添加真实的JDBC4驱动程序解决。我选择了来自微软的那个。 我不会提到这个选择带来的问题,但它解决了标题中所述的问题。

对于那些谁关心:我与转换问题是非常愚蠢的。我仔细研究了实体类,并在String字段上找到了@Lob注释。那么......删除它,解决了转换的问题。我不知道为什么这与JTDS一起工作(我认为JTDS比MS驱动程序更聪明,并且在这种情况下有一些内部自动转换...)。