Я сделал некоторые исправления для решения @Pinhassi. Он обрабатывает некоторые случаи:
1. вы можете перемещать курсор в любом месте
2.minus sign handling
3.digitsbefore = 2 и digitsafter = 4, и вы вводите 12,4545. Затем, если вы хотите удалить «.», Это не позволит.
public class DecimalDigitsInputFilter implements InputFilter {
private int mDigitsBeforeZero;
private int mDigitsAfterZero;
private Pattern mPattern;
private static final int DIGITS_BEFORE_ZERO_DEFAULT = 100;
private static final int DIGITS_AFTER_ZERO_DEFAULT = 100;
public DecimalDigitsInputFilter(Integer digitsBeforeZero, Integer digitsAfterZero) {
this.mDigitsBeforeZero = (digitsBeforeZero != null ? digitsBeforeZero : DIGITS_BEFORE_ZERO_DEFAULT);
this.mDigitsAfterZero = (digitsAfterZero != null ? digitsAfterZero : DIGITS_AFTER_ZERO_DEFAULT);
mPattern = Pattern.compile("-?[0-9]{0," + (mDigitsBeforeZero) + "}+((\\.[0-9]{0," + (mDigitsAfterZero)
+ "})?)||(\\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String replacement = source.subSequence(start, end).toString();
String newVal = dest.subSequence(0, dstart).toString() + replacement
+ dest.subSequence(dend, dest.length()).toString();
Matcher matcher = mPattern.matcher(newVal);
if (matcher.matches())
return null;
if (TextUtils.isEmpty(source))
return dest.subSequence(dstart, dend);
else
return "";
}
}
хорошо, DetachedCriteria являются сериализуемыми, таким образом, Вы имеете встроенный (если неэлегантный), глубоко клонируют поддержку. Вы могли сериализировать начальные критерии к байту [] однажды на конструкции, затем десериализовать ее каждый раз, когда Вы хотите использовать ее.
В том сообщении я определил метод CriteriaTransformer.clone.
, Который должен скопировать объект критериев.
можно также установить проекцию на getlist методе.
Ой я не заметил, что Вы обращались к Java, в спящем режиме. Так или иначе этот http://forum.hibernate.org/viewtopic.php?t=939039
сообщение форума должно быть в состоянии ответить на Ваш вопрос.
Ужасный, как это может быть, я закончил тем, что использовал прием сериализации. Я просто сериализирую эти DetachedCriteria
объект к массиву байтов на конструкции эти PaginatedList
объект и десериализовываю его при необходимости. Ай.
Еще одна вещь, которую стоит попробовать:
реализовать универсальный DAO, такой как , предложенный на сайте hibernate , и передать его объекту PaginatedList вместе с объектом Restrictions. Затем объект PaginatedList будет делать что-то вроде
Criteria.forClass(myDAO.getPersistentClass())
.add(myRestrictions)
.addOrder(<someOrder>)
и
Criteria.forClass(myDAO.getPersistentClass())
.add(myRestrictions)
.setProjection(Projections.rowCount());
. Пока не пробовал, но он должен работать.
Criteria.setProjection(null);
Criteria.setResultTransformer(Criteria.ROOT_ENTITY);
Будет эффективно "сбрасывать" критерии между проекцией rowCount и выполнением самого критерия.
Я бы удостоверился, что ваш Ордер не был добавлен перед выполнением rowCount, он будет замедлить работу. Моя реализация PaginatedList ВСЕГДА запускает запрос подсчета перед поиском результатов, поэтому упорядочение не является проблемой.
public static DetachedCriteria Clone(this DetachedCriteria criteria)
{
var dummy = criteria.ToByteArray();
return dummy.FromByteArray<DetachedCriteria>();
}