Эффективно извлекайте объекты с одной или несколькими ссылками в Grails с помощью GORM.

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

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

public class Foo {
    Bar bar
    String badge
}

public class Bar {
    String name
}

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

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

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

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

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

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

person bebeastie    schedule 03.05.2010    source источник


Ответы (1)


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

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

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

person Chris Wagner    schedule 03.05.2010
comment
выглядит хорошо, это должно работать. Я попробую. огромное спасибо. - person bebeastie; 04.05.2010