将Grails域类设置为";“无插入模式”;

将Grails域类设置为";“无插入模式”;,grails,gorm,Grails,Gorm,我需要在Grails应用程序上使用一个复杂的查询。我没有使用复杂的criteriaBuilder(),而是执行了以下操作: 在数据库上创建视图,例如ParentChildView 将其映射到域类 使用此ParentChildView域类执行.list()操作 我想知道我是否可以将这个域类配置为“仅选择模式”或“不允许插入模式”?-你知道,只是为了确保如果某个开发人员不小心尝试插入到这个域中,会引发异常。根据我对你问题的理解,您不希望发生插入,也不希望更新 你的行动可能就是其中之一 用户元编程和

我需要在Grails应用程序上使用一个复杂的查询。我没有使用复杂的
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 
      } 
      
    我觉得很有帮助,很有价值

    我不确定第三颗子弹是什么,但你也可以试试这个

    希望能有帮助