我们使用Weblogic,Hibernate 4.2.7,Hibernate Spatial 4.0和Oracle作为数据库。
执行保存操作有时,我们观察到无法获取连接
您能否建议我们错过Spatial的任何配置?
Stack Trace :
Caused by: org.hibernate.spatial.helper.FinderException: Tried retrieving OracleConnection from weblogic.jdbc.wrapper.JTSConnection_weblogic_jdbc_wrapper_PooledConnection_oracle_jdbc_driver_LogicalConnection using method getConnectionCacheCallbackPrivObj, but received null.
at org.hibernate.spatial.dialect.oracle.DefaultConnectionFinder.find(DefaultConnectionFinder.java:75)
at org.hibernate.spatial.dialect.oracle.DefaultConnectionFinder.find(DefaultConnectionFinder.java:44)
at org.hibernate.spatial.dialect.oracle.OracleJDBCTypeFactory.createStruct(OracleJDBCTypeFactory.java:119)
... 79 more
答案 0 :(得分:0)
Hibernate Spatial for Oracle DB需要本机oracle连接(take a look to documentation部分 ConnectionFinder接口)。您必须调整weblogic配置或实现自己的ConnectionFinder
以向Hib-Spa提供Oracle连接。
例如,如果您使用的是使用DBCP连接轮询,则只需将accessToUnderlyingConnectionAllowed
属性设置为true
。
答案 1 :(得分:0)
如果您使用的是使用DBCP连接轮询,则只需将 accessToUnderlyingConnectionAllowed 属性设置为 true `@Bean public BasicDataSource dataSource(){
final BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(oracleDriver);
dataSource.setUrl(oracleUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(initSize);
dataSource.setMaxIdle(maxIdle);
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setAccessToUnderlyingConnectionAllowed(true);
return dataSource;
}
`
答案 2 :(得分:0)
如果您正在使用 Spring (Boot) JPA,请尝试
spring.jpa.properties.hibernate.spatial.connection_finder=yourpackage.CustomConnectionFinder
使用连接查找器:
public class CustomConnectionFinder implements ConnectionFinder {
private static final Logger logger = LoggerFactory.getLogger(CustomConnectionFinder.class);
@Override
public Connection find(Connection connection) {
try {
return ((HikariProxyConnection) connection).unwrap(OracleConnection.class);
} catch (SQLException e) {
logger.error("CustomConnectionFinder: error={}", e.getMessage(), e);
}
return null;
}
}