Grails继承每个子类的MongoDb集合

时间:2014-06-25 13:00:51

标签: mongodb grails

在使用mongoDb和继承的Grails 2.3.8应用程序中,我有这个基本域类:

class Record {
long batchID
static mapping = { tablePerHierarchy false }
}

和这个孩子班:

class IndividualRecord extends Record {
    String uniqueId
    String firstName
    String middleName

    static mapping = {
        collection "individualRecords"
        database "twcdb"
    }

    static constraints = {
        firstName(nullable: true)
        middleName(nullable: true)
    }

}

问题是我希望我的子类映射到他们自己的mongoDb集合,但即使使用上面的配置,我的IndividualRecord对象也被保存在一个名为" record"这是基类的名称。我错过了什么?有趣的是,无论我是否从子类中删除此代码,这种行为似乎都无法改变:

static mapping = {
        collection "individualRecords"
        database "twcdb"
    }

3 个答案:

答案 0 :(得分:2)

MongoDB插件目前不支持继承的tablePerHierarchy设置,原因如下:

a)MongoDB不支持联接,因此要获取所有数据,您需要多次查询,这些查询效果不佳

b)即使它确实支持tablePerHierarchy MongoDB没有表,也不会调用它。

答案 1 :(得分:1)

使用聚合而不是继承:

class IndividualRecord {

 Record base

 static embedded = [ 'base' ]

}

答案 2 :(得分:0)

使用AbstractPersistanceListner处理持久性事件。这是代码示例,并在bootstrap.groovy中注册此列表器。完整代码http://jagadeeshmanne.blogspot.in/2016/06/custom-persistence-listener-in-mongodb.html。您可以通过检查entityObject.class.name.equals(IndividualRecord.class.name)来分配属性值,然后分配batchID值

  @-webkit-keyframes pulse {
    0% { background-color: #ed8c55; }
    50% { background-color: #FFF; }
    100% { background-color: #ed8c55; }
  }

  @-moz-keyframes pulse {
    0% { background-color: #ed8c55; }
    50% { background-color: #FFF; }
    100% { background-color: #ed8c55; }
  }

  @-o-keyframes pulse {
    0% { background-color: #ed8c55; }
    50% { background-color: #FFF; }
    100% { background-color: #ed8c55; }
  }

  @keyframes pulse {
    0% { background-color: #ed8c55; }
    50% { background-color: #FFF; }
    100% { background-color: #ed8c55; }
  }

  .element {
    width: 50px;
    height: 50px;
    background: #ed8c55;
    -webkit-animation: pulse 3s infinite; /* Safari 4+ */
    -moz-animation:    pulse 3s infinite; /* Fx 5+ */
    -o-animation:      pulse 3s infinite; /* Opera 12+ */
    animation:         pulse 3s infinite; /* IE 10+, Fx 29+ */
  }