在使用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"
}
答案 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+ */
}