Grails с использованием динамических искателей с 3x + логическими аргументами - PullRequest
3 голосов
/ 15 июня 2011

Мне удалось выполнить поиск в базе данных с помощью этого динамического поиска из Hibernate:

def temp = User.findByNameAndStreet("name", "street")

Хотя мне нужен тройной логический аргумент, подобный этому:

def temp = User.findByNameAndStreetAndCity("name", "street", "city")

Любой простой способсделать это?

1 Ответ

7 голосов
/ 15 июня 2011

Динамические искатели Grails не поддерживают более двух предикатов. Это потому, что неясно, будет ли

User.findByNameAndAgeOrGender('foo', 12, 'm')

означает это:

(name == 'foo' && age == 12) || gender == 'm'

или это:

name == 'foo' && (age == 12 || gender == 'm')

Правда, если предикаты всегда объединяются с And или Or.


Обновление : начиная с Grails 1.4, вы можете иметь неограниченное количество предикатов, если они все объединены либо с And, либо с Or


Вместо этого вы можете использовать findWhere или findAllWhere (в зависимости от того, хотите ли вы только первый результат или все результаты). Оба из них поддерживают неограниченное количество предикатов, которые, как я предполагаю, объединяются с And, например:

User.findAllWhere(name: "foo", age: 12, gender: 'm')
...