【发布时间】:2014-08-30 06:05:30
【问题描述】:
我正在使用 Oracle Spatial,并且我有一个带有 SDO_GEOMETRY 字段的表。
该表映射到 JPA 实体。我想将 SDO_GEOMETRY 字段映射到 java oracle.spatial.geometry.JGeometry 类型。
我想我应该使用 JPA Converter 并与 java.sql.Struct(或者可能是 oracle.sql.STRUCT)相互转换。
问题是JGeometry转换为Struct的方法,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();
}
}
【问题讨论】:
-
这可能对您没有特别的帮助,但 EclipseLink 有空间支持 wiki.eclipse.org/…
标签: java jpa jdbc oracle-spatial