sql - 使用GORM在Grails中使用一对多引用有效地检索对象

标签 sql hibernate grails hql gorm

我试图根据a。)最小化对数据库的调用和b。)保持代码尽可能优雅/简单(即不编写hql等)来确定如何有效地查找/检索/加载对象。

假设您有两个对象:

public class Foo {
    Bar bar
    String badge
}

public class Bar {
    String name
}

每个Foo都有一个酒吧和一个徽章。还要假设所有徽章在酒吧中都是唯一的。因此,如果Foo的徽章为“4565”,则没有其他的Foos具有相同的徽章#和相同的栏。

如果我有条码ID,如何不首先选择条码就可以有效地检索Foo?

我知道我可以这样做:
Foo.findByBadgeAndBar("4565", Bar.findById("1"))  

但这似乎导致在Bar表上进行选择,然后在Foo表上进行选择。换句话说,我需要产生与以下内容相同的Grails / Hibernate / GORM:
select * from foo where badge="4565" and bar_id="1"

最佳答案

您可以使用条件

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

这导致一个选择语句

关于sql - 使用GORM在Grails中使用一对多引用有效地检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2761665/

相关文章:

sql - BCP 不复制所有行

selenium - 如何在 Grails 2.2.2 中从依赖项中排除文件

java - org.hibernate.StaleObjectStateException(实现版本概念时)

hibernate - 从Grails中的Hibernate Event监听器获取调用操作和操作的参数

java - 根据日期条件从mysql数据库表中获取数据

java - 我可以在 grails 项目中包含 java 代码,还是必须导入?

grails - 创建后获取域对象的ID

sql - 如何更改 Postgres 10.2 中某些列的默认排序?

MySQL:根据列值限制接收到的结果数量 |组合查询

mysql - 使用列号而不是名称在 mysql 中进行 SELECT