2012-12-13 4 views
1

의 나는 다음과 같은 코드가 있다고 가정 해 봅시다 :원시 SQL 쿼리로 eBean에서 findIterate를 사용하려면 어떻게해야합니까?

String sql = "select c.id, c.name from Company c left join Tag t on c.id=t.company_id where c.state='PUBLISHED'"; 

List<SqlRow> sqlRows = 
       Ebean.createSqlQuery(sql).setMaxRows(4000000).findList(); 
for(SqlRow row : sqlRows) { 
    // Do cool stuff 
} 

findList() 그때 난 정말이 경우 원하지 않는 어떤 메모리까지 모두를로드합니다.

나는 Query<T>findIterate()하지만 Ebean.createSqlQuery(sql) 반환 SqlQuery을 가지고 있으며, 그 findIterate()이없는 것을 보았다. 그러면 어떻게해야합니까?

답변

2

RFTM이 여기에 있거나, 5 분이 걸리고 문제로 돌아온 것 같습니다.

ServiceClass :

String sql = "Select c.id, c.name from Company c left join Tag t on c.id=t.company_id where c.state='PUBLISHED'";  

RawSql rawSql = RawSqlBuilder 
      .parse(sql) 
      .columnMapping("c.name", "word") 
      .columnMappingIgnore("c.id") 
      .create(); 

Query<SearchWord> query = Ebean.find(SearchWord.class); 
QueryIterator<SearchWord> iterator = query 
      .setMaxRows(4000000) 
      .setRawSql(rawSql) 
      .findIterate(); 
try { 
    while (iterator.hasNext()) { 
     iterator.next() 
     // do magic stuff in here 
    } 
} finally { 
    iterator.close(); 
} 

SearchWord

@Entity 
public class SearchWord { 

    private String word; 
    private String type; 

    public SearchWord() { 
    } 

    public String getWord() { 
     return word; 
    } 

    public void setWord(String word) { 
     this.word = word; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 
} 
이것은 내가 그것을 어떻게입니다