将Grails域类设置为";“无插入模式”;
我需要在Grails应用程序上使用一个复杂的查询。我没有使用复杂的将Grails域类设置为";“无插入模式”;,grails,gorm,Grails,Gorm,我需要在Grails应用程序上使用一个复杂的查询。我没有使用复杂的criteriaBuilder(),而是执行了以下操作: 在数据库上创建视图,例如ParentChildView 将其映射到域类 使用此ParentChildView域类执行.list()操作 我想知道我是否可以将这个域类配置为“仅选择模式”或“不允许插入模式”?-你知道,只是为了确保如果某个开发人员不小心尝试插入到这个域中,会引发异常。根据我对你问题的理解,您不希望发生插入,也不希望更新 你的行动可能就是其中之一 用户元编程和
criteriaBuilder()
,而是执行了以下操作:
视图
,例如ParentChildView
ParentChildView
域类执行.list()
操作我想知道我是否可以将这个域类配置为“仅选择模式”或“不允许插入模式”?-你知道,只是为了确保如果某个开发人员不小心尝试插入到这个域中,会引发
异常。根据我对你问题的理解,您不希望发生插入,也不希望更新
你的行动可能就是其中之一
- 用户元编程和makesave方法为域引发异常。e、 g
User.metaClass.static.save = {
throw new IllegalStateException("Object is not in a state to be save.")
}
- 如果您不确定下面的元编程,您可以使用钩子
def beforeInsert() {
throw new IllegalStateException("Object is not in a state to be save.")
}
def beforeUpdate() {
throw new IllegalStateException("Object is not in a state to be updated.")
}
def beforeDelete() {
throw new IllegalStateException("Object is not in a state to be deleted.")
}
- 尚未尝试使用
mapWith
进行插入/更新,因为它实际上不允许创建表,但像域这样的一切都可用
static mapWith = "none"
- 最后但并非最不重要的一点是,我们也可以使用事务,但这些事务不会有多大帮助。与在服务中一样,您可以使用
@Transactional(readOnly=true)
。但这只会在服务方面有所帮助
- 此外,您还可以禁用版本控制,只希望缓存用于读取
static mapping = {
cache usage: 'read-only'
version false
}
我觉得很有帮助,很有价值
我不确定第三颗子弹是什么,但你也可以试试这个
希望能有帮助