1

让我的脚被 Grails 弄湿了,所以请多多包涵……

只是想知道这是否是瞬态的好方法,或者是否有更好的方法。

说我有

class Author {

String name
String favoriteBook

static transients = ["favoriteBook"]

etc.

“最喜欢的书”是作者出版的一本书的书表中的标题。我有一个数据库存储过程(函数),我想用它来进行此查找。我不希望它持久化到数据库中,只是在执行作者列表(和显示)时动态评估。对于列表,理想情况下它也是可排序的。

注意:使用 Oracle 数据库

这显然不是我在现实世界中的例子,我实际上正在扩展一个遗留数据库,并且无法触及那个结构......我有很多可以使用的存储过程。所以问题仍然存在......我希望我的域类从数据库中提取一个值,该值是存储过程的结果。

我在网上找到了使用瞬变的例子,但不是以这种方式......我在滥用它吗?如何在 g&g 和 GORM 中使用存储过程?

我还找到了使用存储过程的示例,例如 http://www.craigburke.com/post/44771719252/oracle-stored-procs-in-grails 但缺少如何在视图中实现它...

提...

K。

4

1 回答 1

2

我不会将其声明为瞬态,而是将其映射为公式

class Author {
  String name
  String favoriteBook

  static mapping = {
    favoriteBook formula:'find_favorite_book(id)'
}

(或任何所需的 SQL 来调用您的自定义函数)。

引用链接的文档

请注意,ORM DSL 中表达的公式是 SQL,因此对其他属性的引用应该与持久性模型相关,而不是对象模型。

即,如果您需要在公式中引用其他属性,那么您必须使用数据库列名称 ( some_property) 而不是属性名称 ( someProperty)。如果您不想猜测命名约定,那么您应该考虑为要在公式中使用的任何列明确地进行属性到列的映射

static mapping = {
  someProperty column:'my_unusual_column'
}
于 2013-10-28T17:35:23.037 回答