Oracle Spatial を使用しており、SDO_GEOMETRY フィールドを持つテーブルがあります。テーブルは JPA エンティティにマップされます。oracle.spatial.geometry.JGeometry
SDO_GEOMETRY フィールドを Javaタイプにマップしたいと考えています。
JPAコンバーターjava.sql.Struct
を使用して、 (または)との間で変換する必要があると考えましたoracle.sql.STRUCT
。
問題は、構造体に変換する JGeometry メソッドであるJGeometry.storeJS(Connection conn, JGeometry geom)が、パラメーターとして jdbc 接続を必要とすることです。
スプリングEntityManagerFactory
は永続ユニット名で構成され、永続ユニットにはデータ ソースの 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();
}
}