小编Gre*_*ydp的帖子

grails withSession 和当前的休眠会话

我对 Grails 中的 withSession 和当前的休眠会话感到困惑。

我的问题是:我们在闭包中访问的会话对象是否与当前的休眠会话对象相同?

我编写了一个具有如下操作的服务:

def strangeBehavior(){

    Link.withSession { session->
        println "link current session " +  session.hashCode()
    }

    Task.withSession { session->
        println "task current session " +  session.hashCode()
    }

    Project.withSession { session->
        println "project current session " +  session.hashCode()
    }

    UserStory.withSession { session->
        println "user story current session " +  session.hashCode()
    }

    def ctx = AH.application.mainContext
        def sessionFactory = ctx.sessionFactory
        def tmp = sessionFactory.currentSession
        println " current session " +  tmp.hashCode()
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说奇怪的是,有 5 个不同的哈希码...如果我打印 5 …

session grails hibernate

4
推荐指数
1
解决办法
2483
查看次数

Grails为什么不建议连接提取无单端关联?

我在grails doc中看到了一些关于join fetch的内容:

"这适用于单端关联,但你需要小心一对一.查询将按照你期望的那样工作,直到你想要的结果数量限制为止.你可能会得到比你预期的结果更少的结果.原因很简单,但最终问题出现在使用左外连接的GORM上."

我不明白为什么左外连接可以在无单端关联中引发问题,例如一对多.

能给我举个例子 ?

如果我采取约书亚给出的例子

Class Person {
    String name
    static hasMany = [numbers:PhoneNumber]
    static mapping = {
        nubmers fetch  : 'join'
    }
}

Class PhoneNumber{
     static belongsTo = [owner : Person]
}

//for testing
def person = Person.get(1)
result in: 
select name,... from 
       person left outer join phone_number 
       on person.id = phone_number.owner_id 
       where person.id=1;
Run Code Online (Sandbox Code Playgroud)

你能给我一个查询(在gorm中)可以告诉我这个问题吗?

谢谢

grails join fetch

4
推荐指数
1
解决办法
479
查看次数

groovy getProperty()方法的性能问题

假设我有一个具有签名的方法

def myAction(objet,String propertyName);

我只是想从objet中检索属性值,我写了两个版本

版本1:我构造了getter方法并在objet上调用它

    original = propertyName
    prefix = original.substring(0,1).toUpperCase()
    suffix = original.substring(1,original.length())
    methodName = new StringBuilder('get').append(prefix).append(suffix).toString()
    value = domain.metaClass.invokeMethod(objet,methodName,null)
Run Code Online (Sandbox Code Playgroud)

版本2:我直接使用GroovyObject提供的getProperty方法

value = objet.getProperty(propertyName)
Run Code Online (Sandbox Code Playgroud)

巫婆一个有更好的表现?

想 : )

groovy

1
推荐指数
1
解决办法
315
查看次数

标签 统计

grails ×2

fetch ×1

groovy ×1

hibernate ×1

join ×1

session ×1