0

我将 Grails 用于 Web 应用程序,并且必须创建一个数据库查询,在其中我使用一些值进行计算。这些值来自我从和 grails-application 中选择的表。计算的值也应该传递给结果。计算本身并返回所有值就像一个魅力。我得到的结果是这样的(从表中简单地选择所有列):

[[19, 15, false, 49.04757, 8.37106, 1.0, 'some text', false, 0, 0.03360229674009102]]

好吧......我现在要做的是创建我得到的所有结果的对象。因为它是我用来查询数据库的休眠会话,所以我可以选择将“addEntity(className)”添加到查询的执行中 - 如下所示:

def list = sessionFactory.currentSession.createSQLQuery(query).addEntity(myClass).list()

更好的是——我不必手动创建对象。但问题是,我丢失了有关计算值的信息(上部代码片段中的最后一个条目)

我可以想象有两种方法可以实现这一点:hibernate 给了我一些选项,比如 addEntity(myClass) - 就像我创建对象一样 - 添加计算的值

另一种方法是在 sql 查询中命名结果,所以我得到如下内容:

[[id:19, version:15, some_bool: false, first_double: 49.04757, second_double: 8.37106, some_floatvalue: 1.0, text: 'some text', another_bool: false, calculation_result: 0, 0.03360229674009102]]

无论哪种方式,我什至不知道要搜索什么,因为我对这两种技术都不是很熟悉。

总而言之,我想要的是一种简单而干净的方法来创建我的类的实例/对象,并另外获得计算结果。如果您有进一步的想法来实现这一点 - 我很感激每一个提示和提示

甚至一些流行语也能帮助我实现这一目标。

我希望我清楚我的问题 - 如果不告诉我;)

提前致谢

4

1 回答 1

0

而不是org.hibernate.SQLQuery#addEntity您想要使用org.hibernate.SQLQuery#addRootwhich 返回您 a org.hibernate.SQLQuery.RootReturnwhich 可用于进一步定义结果映射。在 3.6 中添加,我很确定这是 Grails 使用的

于 2012-05-21T21:30:29.877 回答