Как обойти ограничения критериев гибернации и примеров API?

I ' m в положении, когда у нашей компании есть служба поиска по базам данных с широкими возможностями настройки, для которой очень полезно настраивать запросы программным способом. API критериев является мощным, но когда один из наших разработчиков выполняет рефакторинг одного из объектов данных, ограничения критериев не будут сигнализировать о том, что они нарушены, пока мы не запустим модульные тесты или, что еще хуже, не будут запущены и в нашей производственной среде. Недавно у нас был проект рефакторинга, который существенно удвоил рабочее время неожиданно из-за этой проблемы, пробела в планировании проекта, который, если бы мы знали, сколько времени он действительно займет, мы, вероятно, приняли бы альтернативный подход.

Я бы хотели бы использовать API примеров для решения этой проблемы. Компилятор Java может громко указать, что наши запросы обработаны, если мы указываем условия «где» для реальных свойств POJO. Тем не менее, API-интерфейс примера имеет ограниченную функциональность, и он во многих отношениях ограничивает. Возьмем следующий пример

 Product product = new Product();
 product.setName("P%");
 Example prdExample = Example.create(product);
 prdExample.excludeProperty("price");
 prdExample.enableLike();
 prdExample.ignoreCase();

Здесь запрашивается свойство «name» (где имя похоже на «P%»), и если бы я удалил или переименовал поле «name», мы бы сразу узнали. А как насчет «цены» собственности? Он исключается, потому что объект Product имеет для него какое-то значение по умолчанию, поэтому мы передаем имя свойства «цена» в фильтр исключения. Теперь, если "цена" будет удалена, этот запрос будет синтаксически недействительным, и вы не узнаете об этом до времени выполнения. LAME.

Другая проблема - что, если бы мы добавили второе предложение where:

 product.setPromo("Discounts up to 10%");

Из-за вызова enableLike () этот пример будет соответствовать тексту промо-акции «Скидки до 10%», но также « даже больше бомбы замедленного действия)

Для всех вышеперечисленных примеров вам нужно будет вернуться к Criteria API и использовать строковые представления свойств для выполнения запроса - опять же, исключая самое большое преимущество Примерных запросов.

Какие существуют альтернативы API-интерфейсу Example, которые могут получить нужные нам рекомендации во время компиляции?

6
задан Anthony Bishopric 12 September 2010 в 20:13
поделиться