Эффективно извлекайте объекты с одной-несколькими ссылками в Grails, используя GORM - PullRequest
0 голосов
/ 04 мая 2010

Я пытаюсь определить, как эффективно находить / извлекать / загружать объекты с точки зрения: а) минимизации обращений к базе данных и б) поддержания максимально элегантного / простого кода (т.е. не пишу hql и т. Д.)

Предположим, у вас есть два объекта:

public class Foo {
    Bar bar
    String badge
}

public class Bar {
    String name
}

У каждого Фу есть бар и значок. Также предположим, что все значки уникальны в баре. Таким образом, если у Foo есть значок "4565", то нет других Foo с таким же значком # И той же полосой.

Если у меня есть идентификатор бара, как я могу эффективно извлечь Foo без первого выбора Bar?

Я знаю, что могу сделать это:

Foo.findByBadgeAndBar("4565", Bar.findById("1"))  

Но это, кажется, вызывает выбор в таблице Bar, а затем выбор в таблице Foo. Другими словами, мне нужно произвести Grails / Hibernate / GORM эквивалент следующего:

select * from foo where badge="4565" and bar_id="1"

1 Ответ

5 голосов
/ 04 мая 2010

Вы можете использовать критерии

    def c = Foo.createCriteria()
    def results = c {
        eq("badge", "4565")
        eq("bar.id", 1L)
    }

Это приводит к единственному оператору выбора

...