2011-09-20 4 views
1

JPA 프로젝트에서 5 개의 관련 엔티티의 데이터가 포함 된 테이블을 표시해야합니다. JPA가 없으면 몇 가지 기준에 따라 5 개의 데이터베이스 테이블을 결합하고 필터링하는 SQL 쿼리를 작성할 수 있습니다. 필터링 기준과 관련된 필드가 첫 번째 엔터티의 필드 만 있다고 가정합니다. JPA 사용하기 첫 번째 엔티티의 필터링 된 인스턴스를로드하고 마지막 엔티티까지 속성을 탐색 할 수 있습니다. fecttype = eager 주석을 사용하거나 실수를 할 수 없으면 데이터베이스에 대한 쿼리 수가 폭발 할 수 있습니다. 그런 경우 가장 좋은 방법은 무엇입니까? 나는 실행될 SQL 쿼리에 대해 엄격한 제어권을 갖고 싶습니다. 그래서이를 최적화 할 수 있습니다.하지만 조인 SQL 쿼리를 직접 작성하면 '이전'결과 집합을 사용하여 데이터를 검색해야합니다. ?여러 조인의 결과를 효율적으로 표시

+0

당신이 당신의 데이터베이스에보기의를 만들 수 있습니까? –

+0

예, 할 수 있습니다. 불행히도 필터링 기준은 동적이므로보기 안에 넣을 수 없거나 간단하게 수행 할 수 없습니다. 내 관심사는 필터링 프로세스에 관한 것입니다. 처음에는보기를 만든 다음 필터를 적용하면 관심이있는 행뿐만 아니라 매우 큰 테이블에 가입해야합니다. 아래 답변에 대한 의견도 꼭 읽어보십시오. – Filippo

+0

좋아요, 정적보기와 동적 쿼리를 함께 사용하면 위험 할 수 있습니다. 프레임 워크 또는 데이터베이스에 대한 자세한 정보를 제공 할 수 있습니까? –

답변

0

JPA의 내장 쿼리 언어 인 JPQL을 사용할 수 있습니까? (이것은 JOIN 연산자를 확실히 가지고 있습니다.) 이것은 표준 SQL이 아니기 때문에 비슷합니다. 따라서 JPQL 문서를 철저히 읽으십시오. 네, 여전히 자바 코드에 임베드 된 일반 텍스트 쿼리입니다.하지만 부끄러운 일입니다.하지만 자바가 개발 프로세스를 지원할 수있는 정도입니다.

여기에서 가장 큰 이점은 쿼리 결과로 엔티티 개체를 가져 오는 것입니다. 여전히 개체에서 개체를 캐스팅해야하지만. 또한 쿼리 문자열에서 직접 객체 (레코드)와 그 멤버 변수 (속성)를 사용할 수 있기 때문에 좋은 이전 JDBC에서 한 단계 올라간다.

또한 Criteria API를 선택할 수도 있지만 솔직히 말해서 내 경험이 그다지 좋지 않았습니다. 구문은 매우 끔찍한 것이므로 기본적으로 저급 쿼리를 직접 작성해야합니다. 이것은 분명히 최악의 경우 Java이지만 ... 최소한 쿼리를 포함하는 문자열은 코드에서 제거 될 수 있습니다. 나는 그것이 그것의 가치가있다라고 확신하지 않는다.

확인 자세한 내용과 예제 페이지 :

http://download.oracle.com/javaee/6/tutorial/doc/gjise.html

+0

초보자를위한 진정한 악몽 인 API에 대해 동의합니다. 내 아이디어는 다음과 같습니다 : 아주 소수의 행이있는 '괴물'보기를 만들어서 엔터티를 만듭니다 (summarydata라고 부름). 조인을 사용하여 JPQL 쿼리를 만들고 동적 필터링 조건을 추가합니다. summarydata로 캐스팅하고 jsf h : datatable로 표시합니다. 그것은 작동해야합니까, 그렇지 않아야합니까? – Filippo

관련 문제