我正在使用 Oracle Spatial,并且我有一个带有 SDO_GEOMETRY 字段的表。该表映射到 JPA 实体。我想让 SDO_GEOMETRY 字段映射到 javaoracle.spatial.geometry.JGeometry
类型。
我想我应该使用 JPA转换器并在java.sql.Struct
(或可能oracle.sql.STRUCT
)之间进行转换。
问题是转换为 Struct 的 JGeometry 方法JGeometry.storeJS(Connection conn, JGeometry geom)需要 jdbc 连接作为参数。
springEntityManagerFactory
配置了持久化单元名称,持久化单元包含数据源jndi名称,数据源定义在tomcat中,作为连接池。
关于如何获得Connection
转换器的任何想法?
这是我想要实现的:
@Converter(autoApply = true)
public class GeometryConverter implements AttributeConverter<JGeometry, Struct> {
@Override
public Struct convertToDatabaseColumn(JGeometry geometry) {
// How to get this connection ?
return JGeometry.storeJS(connection, geometry);
}
@Override
public JGeometry convertToEntityAttribute(Struct struct) {
try {
return JGeometry.loadJS(struct);
} catch (SQLException e) {
throw new RuntimeException("Failed to convert geometry", e);
}
}
}
我正在使用 Spring 4、spring-data-jpa 1.6、Hibernate 4、Tomcat 8、Oracle 12c。
更新了更多信息:
弹簧配置:
@Configuration
@EnableJpaRepositories("com.package.repository")
@EnableTransactionManagement
@ComponentScan("com.package")
public class SpringConfig {
@Bean(name = "entityManagerFactory", destroyMethod = "destroy")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setPersistenceUnitName("persistence-unit");
return emf;
}
@Bean(name = "transactionManager")
public JpaTransactionManager getTransactionManager() {
return new JpaTransactionManager();
}
}