使用Hibernate Spatial

时间:2015-06-27 15:54:51

标签: hibernate weblogic12c hibernate-spatial

我们使用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

3 个答案:

答案 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;
    }
}