奇怪的行为 - mongoDB GORM

时间:2014-05-28 05:43:48

标签: mongodb grails groovy gorm

我有一个使用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集合中的记录包含idActivity个收集记录。

当我这样做时,

   println weekJson.employees.days.planned.activities

打印“活动”列表。然而,

    println weekJson

Activity列表赋予null,渲染为Json也是如此。

为什么GORM第二次没有检索到嵌套对象? 是否有可能GORM无法处理与此嵌套级别的关系?

1 个答案:

答案 0 :(得分:0)

也许您应该切换到域模型中的sub-documents

顺便说一下,如果您想帮助我们,请在您的案例中发布更多数据:您使用的是mongo,grails等版本?您的域类是什么样的?你在保存时在mongo系列中看到了什么?