SQL에 대한 EJB 조회 호환성 문제
EJB(Enterprise JavaBeans) 조회는 SQL(Structured Query Language)로 컴파일되기 때문에 Java 언어와 SQL 사이의 호환성 문제를 인식하고 있어야 합니다.
두 언어는 EJB 조회 공식을 수정할 때 중요할 수 있는 다음과 같은 점에서 서로 다릅니다.
- SQL 문자열의 비교 시맨틱이 Java 언어의 시맨틱과 정확하게 일치하지 않습니다. 예를 들어, "A"(문자 A)와 "A"(문자 A 더하기 공백)는 SQL에서는 같지만 Java 언어에서는 같지 않습니다.
- 비교 및 조합 순서는 기본 데이터베이스에 따라 다릅니다. 예를 들어, EBCDIC 코드 페이지의 DB2를 사용하는 경우, 조합 순서는 Java 프로그램에서 정렬을 수행하는 것과 다릅니다. 일부 데이터베이스는 널값을 낮게 정렬하지만 다른 데이터베이스는 널값을 높게 정렬합니다.
- SQL에서는 산술 오버플로우로 인해 예외가 발생하지만 Java 언어에서는 이러한 예외가 발생하지 않습니다.
- SQL 데이터베이스의 경우 부동 소수점 값의 최소 및 최대 범위가 다르며 이 값은 Java 언어의 부동 소수점 값 범위와 다를 수 있습니다. Java Double의 범위 한계 부근의 값은 SQL로 변환할 수 없습니다.
- Java 메소드는 SQL로 변환되지 않으므로 표준 EJB 조회에는 Java
메소드가 포함될 수 없습니다. 참고: 동적 EJB 조회 서비스를 사용해야 SQL로 변환되지 않는 함수를 사용할 수 있습니다. 이러한 함수에는 RDB(Relational Database)로의 엔터프라이즈 Bean 맵핑에 사용되는 작성기 또는 변환기와 Java 메소드가 포함됩니다. 이 함수 중 임의의 함수를 사용하는 표준 파인더 또는 선택 조회는 메시지 "조회를 푸시 다운할 수 없음"으로 배치 시에 실패합니다. (이 문제점은 조회 또는 맵핑을 변경하여 해결할 수 있습니다.) 그렇지만 동적 조회 런타임은 애플리케이션 서버의 함수에 연관된 연산을 수행하여 조회를 처리합니다.