我有一个使用Grails 2.3.8和Mongo GORM插件3.0.1的Grails应用程序。我有一个服务,它在第一次调用时构造一个对象,并将其保存在mongoDB中并返回它。在后续的调用中,它只是从mongoDB中检索构造的对象并返回它。
def loadWeekData(String startDate,String storeId){
def weekJson = WeekJson.findByStoreIdAndStartDate(storeId,startDate)
if(weekJson==null){
//construct weekJson here
weekJson.save(flush:true)
weekJson=WeekJson.findByStoreIdAndStartDate(storeId,startDate)
}
weekJson
}
WeekJson域类具有hasMany关系的其他嵌套对象。 WeekJson
有多个Employee
,其中有多个Day
,其中有多个Planned
,其中有多个Activity
WeekJson域类
public class WeekJson{
static hasMany = [employees:Employee]
static mapWith = "mongo"
static mapping = {
employees fetch: 'join'
}
String toString()
{
"$employees"
}
}
员工域类
public class Employee {
static mapWith = "mongo"
static hasMany = [days:Day]
static mapping = {
days fetch: 'join'
}
String toString()
{
"$days"
}
}
日域类
public class Day {
Planned planned;
static mapWith = "mongo"
static constraints = {
planned nullable:true
}
String toString()
{
" plan: $planned "
}
static mapping = { planned lazy:false}
}
计划域类
public class Planned {
List<Activity> activities
static hasMany = [activities:Activity]
static mapWith = "mongo"
static mapping = {
activities lazy:false
}
String toString()
{ activities }
}
活动域类
public class Activity {
String inTime;
String outTime;
double duration;
String type;
String desc;
static mapWith = "mongo"
static constraints = {
duration nullable:true
type nullable:true
desc nullable:true
}
String toString()
{
"$inTime to $outTime"
}
}
我已经在所有具有hasMany关系的类中改变了抓取行为。
第一次,所有嵌套对象都被正确构造,保存在mongoDB中,并且返回的对象是正确的。
但是,对于下一次调用,Activity
个对象为空。我已经验证了在此调用期间嵌套对象仍然存在于mongoDB中。 Planned
集合中的记录包含id
到Activity
个收集记录。
当我这样做时,
println weekJson.employees.days.planned.activities
打印“活动”列表。然而,
println weekJson
将Activity
列表赋予null,渲染为Json也是如此。
为什么GORM第二次没有检索到嵌套对象? 是否有可能GORM无法处理与此嵌套级别的关系?
答案 0 :(得分:0)
也许您应该切换到域模型中的sub-documents
。
顺便说一下,如果您想帮助我们,请在您的案例中发布更多数据:您使用的是mongo,grails等版本?您的域类是什么样的?你在保存时在mongo系列中看到了什么?