Я использую структуру DAO с именем «QueryDSL». Когда я запускаю запрос, QueryDSL извлекает все результаты вместе, что не требуется. Я ищу душу, которая позволяет мне загружать результаты в ленивой форме.Lazy Загрузка в QueryDSL
0
A
ответ
0
В конечном итоге я ввел ленивый список. Это хорошо работает. :)
public class LazyList<T> implements List<T> {
private SQLQuery query;
private long size = 0;
private int limit = 100;
private Expression<T> exprsn;
private int offset = 0;
private List<T> cache = new ArrayList<>();
public LazyList(SQLQuery query, Expression<T> exprsn) {
this.query = query;
this.exprsn = exprsn;
size = query.count();
cache = query.limit(limit).offset(offset).list(exprsn);
}
@Override
public int size() {
return (int) size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public T get(int index) {
if (index < offset || index > offset + limit) {
cache = query.limit(limit).offset(offset).list(exprsn);
}
return cache.get(index - offset);
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
private int index = 0;
private int offset = 0;
private List<T> cache = new ArrayList<>();
{
cache = query.limit(limit).offset(offset).list(exprsn);
}
@Override
public boolean hasNext() {
return index < size;
}
@Override
public T next() {
if (index < offset || index > offset + limit) {
cache = query.limit(limit).offset(offset).list(exprsn);
}
return cache.get(index - offset);
}
};
}
@Override
public boolean contains(Object o) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Object[] toArray() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public <T> T[] toArray(T[] a) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean add(T e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean remove(Object o) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean containsAll(Collection<?> c) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean addAll(Collection<? extends T> c) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean removeAll(Collection<?> c) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean retainAll(Collection<?> c) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void clear() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public T set(int index, T element) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void add(int index, T element) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public T remove(int index) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public int indexOf(Object o) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public int lastIndexOf(Object o) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public ListIterator<T> listIterator() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public ListIterator<T> listIterator(int index) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public List<T> subList(int fromIndex, int toIndex) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
1
Думаю, вам нужна нумерация страниц.
Прочитать here как его организовать. Вам нужно что-то подобное, чтобы загрузить часть ваших данных.
Page<T> findAll(com.mysema.query.types.Predicate predicate,
Pageable pageable)
0
Querydsl SQL не поддерживает отложенную загрузку, в Querydsl JPA отложенной загрузки обрабатывается поставщиком JPA.
Смежные вопросы
- 1. Lazy Загрузка в MongoDb
- 2. Lazy Загрузка в winforms
- 3. Lazy Загрузка в NHibernate
- 4. Lazy Загрузка в LongListSelector
- 5. Lazy Загрузка PDF
- 6. Lazy загрузка веб-компонента
- 7. Yii Lazy Загрузка
- 8. UIScrollView Lazy Загрузка изображений
- 9. Lazy/отложенная загрузка CollectionViewSource?
- 10. Vue.js 2.0 Lazy Загрузка
- 11. Autofac Lazy Загрузка
- 12. GWT Lazy Загрузка
- 13. Lazy Загрузка макетов
- 14. ExtJS4 MVC Lazy Загрузка
- 15. Python Lazy Загрузка
- 16. ASP.NET HoverMenuExtender Lazy Загрузка
- 17. EF Lazy Загрузка
- 18. Android Lazy Загрузка
- 19. Lazy загрузка компонента richface
- 20. Что такое Lazy Загрузка?
- 21. Kendo UI Lazy Загрузка
- 22. Singleton Lazy Загрузка шаблона
- 23. Asynchronous Lazy Загрузка в ActionScript
- 24. Lazy Загрузка шаблонов в Meteor
- 25. CSS Lazy Загрузка в Chrome
- 26. Lazy загрузка модулей в Nodejs
- 27. Lazy Загрузка recyclerView в android
- 28. Lazy загрузка изображений в ViewPager
- 29. Lazy загрузка изображения в ImageSpan
- 30. UITableView On Screen Image Загрузка Lazy Загрузка
Что делать, если 'size' переполняется? – Mackiavelli
Это слишком простая реализация, которая просто представляет идею и нуждается в ее завершении для реального производства. Однако это удовлетворяет моим простым требованиям. :) – user3359139
Хорошо, но вы не должны делать такие приведения. Зачем вам это нужно, если вы собираетесь работать с 32 битами ... – Mackiavelli