문제

Java, 특히 Hibernate를 사용하여 데이터베이스에 구애받지 않는 앱을 ​​만들고 동시에 Oracle 및 Postgres 데이터베이스를 대상으로 하는 경험이 있는 사람이 있습니까?

특히 저는 Oracle Spatial과 PostGIS를 살펴보고 있습니다.우리는 Oracle Spatial과 PostGIS 백엔드 모두에서 사용할 수 있는 Java 기반 SOA를 만들고 싶습니다.나는 이 두 데이터베이스 모두에 대해 Hibernate를 사용해 보았지만 둘 다를 목표로 삼을 의도는 전혀 없었습니다.어떤 데이터베이스가 사용되는지에 따라 동일한 코드가 다른 결과를 생성할 수 있는 시나리오를 만들 수 있습니다.

아마도 최대 절전 모드로 이 문제를 처리할 수 있지만 알려진 문제가 있는지 듣는 것이 좋을 것입니다.

시야

도움이 되었습니까?

해결책

최대 절전 모드와 함께 추천할 수 있는 것은 최대 절전 모드 공간 , 각각의 GIS 확장과 함께 Mysql, Oracle 및 Postgre를 지원하는 확장입니다.

내가 겪은 몇 가지 함정:

방언의 구성은 올바르게 수행하는 것이 쉽지 않았습니다.나에게 일어난 것처럼 모든 문장에 대해 방언이 재구성되지 않았는지 확인하십시오.

사용하는 hibernatespatial의 기능에 따라 특정 버전의 최대 절전 모드에 갇힐 수도 있습니다.

기준 api만 사용할 수 있으며 hql은 직접 지원되지 않습니다.

hibernatespatial을 사용하는 내 코드는 다음과 같습니다.

  if (query.getMaxDistance() != null && query.getCenter() != null) {
        basicCriteria.add(SpatialRestrictions.within("coordinate", GeoidCircleFactory.circle(query.getCenter(), query.getMaxDistance())));
    }

당신은 Postgis와 다른 사람들이 겪고 있는 매우 심각한 제약 중 일부로 고통받을 것입니다.DB의 가능성에 더 잘 맞도록 애플리케이션 요구 사항 중 일부를 완화하는 것이 좋습니다.예를 들어, "각도 공간"의 쿼리는 "유클리드 공간"보다 수행하기가 훨씬 쉽습니다.

GeoidCircleFactory에 포함된 코드는 꽤 무섭게 보입니다...:)

다른 팁

Hibernates 방언을 사용하는 것 외에도 다음과 같은 데이터베이스 생성 관리 도구가 필요할 것입니다. 리퀴베이스 이를 통해 생성 코드를 다른 데이터베이스의 특정 구문에서 추상화할 수 있습니다.

Hibernate는 다음을 사용하여 다양한 데이터베이스 대상을 처리합니다. 방언 추출.애플리케이션 자체를 변경할 필요는 없으며 각 데이터베이스의 최대 절전 모드 구성만 변경할 수 있습니다.

당신은 데이터베이스와 함께 사용할 방언을 구성에서 지정하거나 Hibernate가 적절한 방언을 결정하기 위해 JDBC 드라이버 설정을 사용하도록 허용할 수 있습니다.

받은 의견에 따라 살펴 보셨습니까? 최대 절전 모드 공간?이는 필요한 Hibernate 유형과 방언을 제공하여 지리적 데이터를 지원하는 Hibernate의 확장입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top