dresende / node-orm2

Object Relational Mapping
http://github.com/dresende/node-orm2
MIT License
3.07k stars 379 forks source link

Cache mechanism causes some trouble #694

Closed xidui closed 8 years ago

xidui commented 8 years ago

I defined a mysql model

{
    id: {type: 'number'}
    some_object: {type:'text'}
}, {
    hooks: {
        beforeSave: function (next){
            this.some_object = JSON.stringify(this.some_object);
            return next();
        },
        afterLoad: function (next){
            this.some_object = JSON.parse(this.some_object);
            return next();
        }
    }
}

Every time I use it, it want the field is already a JSON obj and text in db

Seems that there is a caching mechanism:

  1. I get it by id immediately after I create one. I found that the afterLoad will not be called when I do some search thing
  2. which causes the problem: the beforeSave hook is called at last, so the some_object in memory is text not obj

how about calling the afterLoad hook no matter it is in cache or not?

dxg commented 8 years ago

The cache is not a cache but an implementation of the identity pattern. It will not improve performance, so you might as well not use it.

xidui commented 8 years ago

@dxg How can I call afterLoad every time I use the model.get