Sql server 从Grails访问SQL Server 2008视图

Sql server 从Grails访问SQL Server 2008视图,sql-server,grails,Sql Server,Grails,我们有一个Grails项目,需要从SQLServer2008视图中提取数据。我们只需要从视图中进行基本选择 是否有视图的配置设置,以便我们可以将域类映射到视图 或者我们应该使用原始SQL,比如: db.rows("SELECT foo, bar FROM my_view") 您可以使用SQL,例如,在另一个类似问题的答案中建议的groovy.SQL.SQL中使用SQL,但也可以在域类中使用。如果创建域类(使用任何合理的名称)并将其表名指定为视图的名称,则可以从中进行选择。当然,您在创建和更新时

我们有一个Grails项目,需要从SQLServer2008视图中提取数据。我们只需要从视图中进行基本选择

是否有视图的配置设置,以便我们可以将域类映射到视图

或者我们应该使用原始SQL,比如:

db.rows("SELECT foo, bar FROM my_view")

您可以使用SQL,例如,在另一个类似问题的答案中建议的
groovy.SQL.SQL
中使用SQL,但也可以在域类中使用。如果创建域类(使用任何合理的名称)并将其表名指定为视图的名称,则可以从中进行选择。当然,您在创建和更新时会遇到问题,但如果您只想阅读,则可以:

class SomeDomainClass {
   String foo
   Integer bar
   static mapping = {
      table 'my_view'
   }
}
如果将类命名为MyView,则不需要映射,因为命名约定适用,但这对于类来说是一个坏名称,因为使用它与它由视图支持这一事实无关


请注意,使用dbCreate set“create”、“create drop”或“update”时也会出现问题,因为Hibernate将尝试创建表,但这不会导致任何实际问题,只会显示一个可忽略的错误,如“无法创建表'my_view',因为它已经存在”。一旦您开始使用数据库迁移,这将不再是一个问题。

您会发现哪种方法被认为是最佳做法?使用域类方法更方便,因为您可以访问所有查询方法(动态查找器、条件查询等),而使用SQL则更为费力,并且可能导致特定于数据库的代码不可移植。好吧,因为我们在从hibernate启动时出错,试图将视图更改为表,即使列已经存在。如果它们如Burt所说是“可忽略的”,那么我们将继续使用domain类。