当前位置:  开发笔记 > 数据库 > 正文

如何在Grails中建模存储过程记录?

如何解决《如何在Grails中建模存储过程记录?》经验,为你挑选了1个好方法。

我需要调用一些返回各自记录的存储过程,这些记录不会直接映射到表或视图.

我过去使用过存储过程groovy.sql.Sql和普通(未建模)映射,但对于这个应用程序,我想用类似于域类的东西对这些记录进行建模,以便定义数据类型,数据绑定,验证,与其他实体的关联, 等等.

这样做的最佳方法是什么?

我应该将存储过程记录建模为正确的域类(实体),然后尝试禁用(或重新定义)其数据库持久性吗?怎么样?

我应该使用非域POJO来选择性地启用我需要的功能吗?(例如验证@Validatable)我如何处理关联呢?(当从SP返回的记录包含到某个其他持久实体的外键时,就会出现关联.)



1> Sandeep Poon..:

如果您希望以简单的方式维护数据绑定,验证和关联,那么您应该使用Domain方法.

要禁用域类的数据库持久性,可以添加static mapWith = "none"到域类,并且不会为该域类创建表.

示例实体类:

@ToString
public class SPTest {

    Long idField

    User user

    GroupIntegrationKey integrationKey

    static constraints = {
    }

    static mapWith = "none"
}

存储过程声明:

SELECT id AS idField,user_id AS user,key AS integrationKey FROM my_domain;

为了将SP的结果映射到实体,您可以使用结果变换器.

Query query = session.createSQLQuery("CALL getSPData()");

List results = query.with {
    resultTransformer = AliasToEntityMapResultTransformer.INSTANCE
    list()
}

现在迭代列表并创建一个新的实体对象

List list = results.collect {
    new MyDomain(it)
}

System.err.println(list)

缺点:

    您无法映射标识符字段

    您必须再次迭代结果以创建实体对象

    您无法映射hasMany关系

如果你想使用pojo,那么在这种情况下你必须创建自己的getter版本来获取相关对象.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有