2013-09-02 2 views
2

데이터베이스의 개체에 태그를 추가하는 경우 다음 스키마를 사용하는 것이 일반적인 방법입니다.JOOQ로 태그 된 객체를 읽는 가장 좋은 방법은 무엇입니까?

추가 할 수있는 태그와 많은 특성을 가진 엔터티가 있습니다. 는 세 개의 테이블이있다 말할 수 있습니다 :

열 ID와 이름 (및 다른 값)와 테이블 요소,
테이블 컬럼에 태그 TAGID 및 TAGNAME 및
TAGID와 elementId로부터와 테이블 TagsToElement가있는 태그를 요소에 할당합니다.

특정 태그가 지정된 요소를 데이터베이스에서 읽는 좋은 방법 인 것 같습니다. 내 말은, Jooq의 Condition은 특정 태그가 할당 된 ELements 만 필터링하는 것과 어떻게 다릅니 까?

데이터베이스에 한 번만 액세스하면 가능합니까?

인사말

마이크

언제나 jOOQ

답변

0

, 먼저 자신에게 물어해야 할 질문은 "어떻게 SQL이 쓰기 것?". 당신은 IN 술어보다는 EXISTS 술어도 반에 가입하여 표현할 수

// import static org.jooq.impl.DSL.*; is assumed 
DSL.using(configuration) 
    .selectFrom(Element) 
    .whereExists(
     selectOne() 
    .from(Tags) 
    .join(TagsToElement) 
    .on(Tags.TAGID.eq(TagsToElement.TAGID)) 
    .where(Element.ID.eq(TagsToElement.ELEMENTID)) 
    .and(Tags.TAGNAME.eq("Specific Name")) 
    ) 

을 분명히 : 1 jOOQ에 : SQL에서는

SELECT * 
FROM Element 
WHERE EXISTS (
    SELECT 1 
    FROM Tags 
    JOIN TagsToElement 
    ON  Tags.TAGID = TagsToElement.TAGID 
    WHERE Element.ID = TagsToElement.ELEMENTID 
    AND Tags.TAGNAME = 'Specific Name' 
) 

위의 (1) 번역 ​​써서 .

+0

답장을 보내 주셔서 감사합니다. 다음과 같은 요소를 읽기 위해 구조를 유지하려고합니다. create.select (fields) .from (table) .where (conditions) .fetch(); 여기서 fields는 필드 집합으로 테이블 집합과 조건 집합을 나열합니다. 요소는 여러 속성으로 필터링 할 수 있습니다. 일치하는 조건을 만들어 세트에 추가합니다. 태그를 사용하여 필터링을위한 조건을 생성하는 방법이 있습니까? 인사말 마이크 – user1817612

+0

@ user1817612 : 스택 오버플로 주석은 이러한 것들을 설명하는 가장 좋은 방법은 아닙니다. 그들은 꽤 오래 걸리는 경향이 있습니다. 왜이 대답을 받아들이지 않고 조건 만들기에 대한 새로운 질문을 던지십시오. –