2017-03-22 2 views
0

내가네이티브 SQL 쿼리를 사용, DataNucleus에서의 1-1 관계로 엔티티를로드하는 방법

class LoanApplication{ 
    private Account account; 
    //... 
} 

class Account{ 
    private LoanApplication loanApplication; 
} 

나는 다음과 같은 기본 쿼리를

select * from account a left join loan_application la on a.id = la.account_id where a.id in (1,2,3,4,5); 

을 사용하고 싶어 엔티티가 JOINS LoanApplication 객체가있는 Account 객체 집합입니다. DataNucleus로 수행하는 방법은 무엇입니까?

+0

은 SQL에서 처리하고 데이터베이스 독립성을 포기하는 것은 의미가 없습니다. JDOQL 않습니다. –

+0

좋아, 그냥 간단한 예제를 사용하여 부탁드립니다. 두 개의 테이블을 조인하고 엔티티 그래프 (1 : 1, 1 : M 릴레이션)를 생성해야합니다. JDOQL로 어떻게 할 수 있습니까? – Taras

+0

나는 이미 다른 질문에 대해 FetchPlans의 문서를 설명하고 지적했다. 누군가 이미 이미 아래 답변했습니다 –

답변

1

JDOQL에는 "엔터티 그래프"가 없습니다. 아마 당신은 더 유연한 "계획 가져 오기"를 의미합니다. 어쨌든 쿼리는

SELECT FROM mydomain.Account WHERE :vals.contains(this.id) 

과 같을 수 있으며 입력 매개 변수 인 "vals"를 int 목록으로 정의합니다. 즉 자바 구문. 그리고 loanApplication 필드를로드하도록 가져 오기 계획을 설정하십시오. Account의 매핑에 다음과 같이 추가하십시오.

<fetch-group name="loanApps"> 
    <field name="loanApplication"/> 
</fetch-group> 

다음 쿼리를 실행하기 전에

q.getFetchPlan().addGroup("loanApps"); 

를 호출합니다.

+0

고마워, 나는 이것을 시도했습니다. 그러나 쿼리가 실행 된 후에는 계정 목록이로드되지만 loanApplication은 null입니다. 비록 내가 fetch group을 구성 할지라도, 그 필드에 대해서 여전히 lazy loading을 사용하고 그것을 fetch plan에 추가합니다. 문제는 DataNucleus 2를 사용하지만 두 번째 버전 인 – Taras

+0

의 문서에서 그룹을 가져 오는 것과 동일한 예제가 있으므로 최신 버전을 사용하십시오! –

관련 문제