Second attempt: failure
applicationContext.xml
Code:
<bean class="org.springframework.jdbc.support.nativejdbc.OracleJdbc4NativeJdbcExtractor" id="nativeJdbcExtractor" />
<bean class="org.springframework.jdbc.support.lob.OracleLobHandler" id="lobHandler">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
Entity:
Code:
public class Imagen {
@Transactional
public void save() {
jdbcTemplate.execute("insert into gi_imagen_escaner "
+ " (alto, ancho, fecha_alta, datos, ... ) "
+ " values (?, ?, ?, ?, ...) "
,
new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
@Override
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException, DataAccessException {
ps.setInt(1, Imagen.this.alto);
ps.setInt(2, Imagen.this.ancho);
ps.setDate(3, new java.sql.Date(Imagen.this.fechaAlta.getTime()));
lobCreator.setBlobAsBytes(ps, 5, Imagen.this.imagen);
...
}
}
);
}
Test:
Code:
public class ImagenIntegrationTest {
//Imagen.persist();
Imagen.save();
ERROR
java.lang.NoSuchMethodError: java/sql/Connection.unwrap(Ljava/lang/Class
Ljava/lang/Object;
at org.springframework.jdbc.support.nativejdbc.Jdbc4N ativeJdbcExtractor.doGetNativeConnection(Jdbc4Nati veJdbcExtractor.java:98)
at org.springframework.jdbc.support.nativejdbc.Native JdbcExtractorAdapter.getNativeConnection(NativeJdb cExtractorAdapter.java:99)
at org.springframework.jdbc.support.nativejdbc.Native JdbcExtractorAdapter.getNativeConnectionFromStatem ent(NativeJdbcExtractorAdapter.java:135)
at org.springframework.jdbc.support.lob.OracleLobHand ler$OracleLobCreator.getOracleConnection(OracleLob Handler.java:527)
at org.springframework.jdbc.support.lob.OracleLobHand ler$OracleLobCreator.createLob(OracleLobHandler.ja va:486)
at org.springframework.jdbc.support.lob.OracleLobHand ler$OracleLobCreator.setBlobAsBytes(OracleLobHandl er.java:368)
at com.malsolo.blobs.domain.Imagen$1.setValues(Imagen .java:129)
at org.springframework.jdbc.core.support.AbstractLobC reatingPreparedStatementCallback.doInPreparedState ment(AbstractLobCreatingPreparedStatementCallback. java:72)
at org.springframework.jdbc.core.support.AbstractLobC reatingPreparedStatementCallback.doInPreparedState ment(AbstractLobCreatingPreparedStatementCallback. java:1)
at org.springframework.jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:587)
at org.springframework.jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:615)
at com.malsolo.blobs.domain.Imagen.save(Imagen.java:1 14)
at com.malsolo.blobs.domain.ImagenIntegrationTest.tes tSaveImageForGi(ImagenIntegrationTest.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.junit.runners.model.FrameworkMethod$1.runRefle ctiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallabl e.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExpl osively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod .evaluate(InvokeMethod.java:20)
at org.springframework.test.context.junit4.statements .RunBeforeTestMethodCallbacks.evaluate(RunBeforeTe stMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements .RunAfterTestMethodCallbacks.evaluate(RunAfterTest MethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements .SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUni t4ClassRunner.runChild(SpringJUnit4ClassRunner.jav a:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild( BlockJUnit4ClassRunner.java:48)
at org.junit.runners.ParentRunner$3.run(ParentRunner. java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRu nner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentR unner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRu nner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRu nner.java:222)
at org.springframework.test.context.junit4.statements .RunBeforeTestClassCallbacks.evaluate(RunBeforeTes tClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements .RunAfterTestClassCallbacks.evaluate(RunAfterTestC lassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.ja va:292)
at org.springframework.test.context.junit4.SpringJUni t4ClassRunner.run(SpringJUnit4ClassRunner.java:174 )
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestR eference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecutio n.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRu nner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRu nner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRu nner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRu nner.main(RemoteTestRunner.java:197)
That's true for the JAR that I'm using