2010-03-30 3 views
1

나는 다양한 이유로 Hibernate에 대한 대안을 찾고있다. 나는 Liquibase를 보았고 나는 그 아이디어를 좋아해서 그것을 시도 할 용의가있다. Liquibase는 SQL 독립적 인 방식으로 데이터베이스 생성/수정을 제공합니다. 내 주요 질문은 내 응용 프로그램의 코드가 데이터베이스에 종속되지 않고 SQL 문을 실행하는 방법입니다. Hibernate Dialect 클래스처럼 작동하는 다른 프로젝트가 있습니까?Java SQL 데이터베이스 독립성

감사합니다,

폴 SQL을 사용하여 함께 문제의

+1

실례 합니다만, Liquibase는 DB 액세스 라이브러리가 아닌 데이터베이스의 "버전 제어"도구 인 것으로 보입니다. 그래서 당신의 질문은 일리가 없습니다. IMHO. –

+0

어떤 부분이 맞지 않습니까? 데이터베이스 독립성을위한 솔루션에 대해 이야기하고 있으며 Liquibase는 생성/수정 또는 "버전 제어"를위한 것입니다. – Paul

+0

나중에 응용 프로그램에 대해 이야기하고 SQL 문을 실행합니다 ("DDL 만"은 아님). LB를 Hib와 비교하는 것. 그것은 모든 혼란이 커지는 곳입니다. –

답변

1

내 기본 질문은 내 응용 프로그램의 코드가 데이터베이스에 종속되지 않고 SQL 문을 실행하는 방법입니다.

실제로이 작업을 수행하는 유일한 방법은 데이터베이스 특정 SQL로 변환되는 SQL보다 높은 수준의 쿼리 언어를 사용하는 것입니다. 그리고 우리는 Toplink QL, EJB-QL, JDO QL, HQL, JPQL 등의 몇 가지 (독점적 인, 표준적인) DSL을 이미 가지고 있습니다. 제 제안은 독을 선택하는 것입니다 (그러나 제발, 자신의 솔루션을 굴리지 마십시오.).

1

하나는 공급 업체에 의존하는 것입니다. 나는 써드 파티 라이브러리 나 프레임 워크 (Hibernate와 같은)를 사용하지 않고서도이를 해결할 방법이 없다고 생각한다.

그러나 SQL을 사용하는 경우 Ibatis을 살펴 보는 것이 좋습니다.

+0

나는 ibatis를보고 사용했다. 나는 이것이 나의 문제에 어떻게 도움이되는지 보지 않는다. 내가 놓친 게 있니? – Paul

1

의심 스럽습니다. 최대 절전 모드의 방언은 객체와 HQL 쿼리를 적절한 네이티브 쿼리로 변환하는 데 사용됩니다.

일반 SQL 쿼리를 사용하려면 SQL 쿼리를 SQL 쿼리로 변환해야합니다.

데이터베이스 독립성을 얻는 한 가지 방법은 ANSI SQL 만 사용하는 것입니다. 하지만 그렇다고해서 완전한 데이터베이스 독립성을 보장하는 것은 아닙니다.

나는 당신이 당신이 할 수있는 일반 liquibase 프로세스의 외부 liquibase의 SQL 생성 클래스를 사용하려면 최대 절전 모드 및 HQL (JPA-QL)

+0

ANSI SQL을 준수한다는 것은 또한 표준 범위를 벗어나는 많은 것들이 있기 때문에 수행 할 수있는 작업이 매우 제한적이라는 것을 의미합니다. (특히 이전 버전의 스펙 만 지원되는 경우) –

1

고집 좋을 것. 특히 2.0에서는 SQL 생성 클래스가 향상되고 추상화되었지만 실행하려는 항목에 따라 요구 사항을 충족하지 못할 수도 있습니다.

liquibase는 데이터베이스 마이그레이션에 관한 것이기 때문에 데이터베이스 독립적 인 로직의 대부분은 insert/update/delete 구문을 중심으로 DDL 문 (create table/add column 등)을 둘러싼 것이 아닙니다. 어떤 유형의 문장을 실행할지 알지 못한다면, 데이터베이스 간 삽입/업데이트/삭제 문에 대해 더 많은 관심이 있다고 가정합니다.이 경우 hibernate/ibatis/etc가 더 잘 작동합니다.

관련 문제