Grails 是否可以将作用域设置为域类?

Grails 是否可以将作用域设置为域类?,grails,scope,dns,Grails,Scope,Dns,我想知道grails是否可以为域类指定一个作用域 用几句话来解释我的应用程序目前是如何工作的: -数据库访问是通过使用SQLJ的外部“模块”完成的。此模块由my grails应用程序中的控制器提供。 -用户请求特定的信息提交表单->提交到外部模块的请求->从数据库提取的信息->加载到grails mem DB(HSQL)中的信息->视图中显示的信息 它在开发环境中运行良好,因为我是唯一使用该应用程序的人。但我想知道应用程序在两个或更多用户的情况下会如何运行。我的意思是,加载到grails内存数据

我想知道grails是否可以为域类指定一个作用域

用几句话来解释我的应用程序目前是如何工作的: -数据库访问是通过使用SQLJ的外部“模块”完成的。此模块由my grails应用程序中的控制器提供。 -用户请求特定的信息提交表单->提交到外部模块的请求->从数据库提取的信息->加载到grails mem DB(HSQL)中的信息->视图中显示的信息

它在开发环境中运行良好,因为我是唯一使用该应用程序的人。但我想知道应用程序在两个或更多用户的情况下会如何运行。我的意思是,加载到grails内存数据库中的信息是否会在用户之间共享?如何避免一个用户请求的信息和其他用户共享

提前感谢您对本主题的任何帮助


问候。

它将在所有用户之间共享


但这取决于您,对于任何其他数据库,必须有一些条件(db列),您可以根据这些条件仅选择与当前用户相关的信息。

数据库中的所有数据都在grails应用程序的所有用户之间共享。您必须编写一个自定义查询来限制返回给特定用户的数据。根据您的应用程序,可能类似于以下内容

class DomainClass1 {
//fields you get from SQLJ go here
int userId
}
将数据获取到域类的实例中

def domInstance=new DomainClass1()
domInstance.loadFromSQLJ() //call the SQLJ module and put it's data in the domain class
domInstance.userId=5 //assign the user associated with this info
domInstance.save()
然后,当您想要为用户ID为5的用户显示信息时

def domInstance2=DomainClass1.findByUserId(5)
//Do stuff with domInstance2

在我们的项目中,我们覆盖了域类“
get()
list()
,这些域类考虑了(a
User
或其他什么),并且还检查了所有命名查询

这样就省去了所有其他访问实例的方法,如
findBy*()
、条件、
findWhere()
(尽管您也可以覆盖动态方法)或HQL,但无论如何都会将安全审查的数量减少80%


突然,在scaffolding中使用
DomainClass.list()
是可以的。

OK。如果我理解得很好,那么我想要做的唯一方法就是为每个用户模拟个人虚拟数据库,以便在应用程序中只显示他们的数据。是否有任何grails配置(例如来自DataSource.groovy文件)可以实现这一点?大家好。非常感谢你,杰瑞德和维克托,我将混合使用你的解决方案。