2017-02-06 10 views
1

feathersjs-sequelizeとmysqlデータベースを使用してJava/Hibernate/TABLEシーケンス機能https://dzone.com/articles/hibernate-identity-sequenceを再現しようとしています。作成する前にフライトを作成するにはフックを作成するmysql関数を呼び出す

mysql> select generate_pessoa_seq(); 
+-----------------------+ 
| generate_pessoa_seq() | 
+-----------------------+ 
|     11 | 
+-----------------------+ 
1 row in set (0,00 sec) 

OK:

だから、私は、MySQLで、私は、MySQLのCLIでテストその後

FUNCTION `generate_pessoa_seq`() RETURNS bigint(16) 
BEGIN 
DECLARE R_ID BIGINT(16); 
UPDATE pessoa_seq SET next_value = next_value + 1; 
SELECT next_value INTO R_ID FROM pessoa_seq; 
RETURN R_ID; 

を次の関数を作成しました。今私は "pessoa"と呼ばれる私のテーブルのID値として11を使うことができます。

だから私はアイデア怒鳴る(ペソアフック)

const pessoaBeforeCreateHook = options => { // always wrap in a function so you can pass options and for consistency. 
    return hook => { 
    console.log('Pessoa hook ' + hook); 

    sequelize = hook.app.get('sequelize'); 
    var newId = -1; //forcing an error 
    sequelize.query('select generate_pessoa_seq();',{ type: sequelize.QueryTypes.SELECT}).then(function(response){ 

     //getNewId(); 
     newId = response; 

    }).error(function(err){ 
     console.log(err); 
     newId=-1; 
    }); 
    hook.data.IdiPessoa=newId; 
    return Promise.resolve(hook); // A good convention is to always return a promise. 
    }; 
}; 

exports.before = { 
    all: [], 
    find: [], 
    get: [], 
    create: [pessoaBeforeCreateHook()], 
    update: [], 
    patch: [], 
    remove: [] 
}; 

に従うことをしようとしています任意の助けてくれてありがとう。

+0

を参照してくださいhttps://github.com/feathersjs/羽毛/問題/ 512#issuecomment-278051246 – Daff

答えて

1

dafflは言った:

Sequelizeクエリが約束を返し、非同期的に実行するので、あなたはそれがニーズを解決したら、実行したい任意のロジックが.thenハンドラであることを。

ので、最終的なコードはここにある:それが行われるまで、あなたはまた、それが待機するように、フック関数からその約束を返す必要が

pessoaService.hooks({ 
    before: { 
    create(hook) { 
    const sequelize = app.get('sequelize'); 
    var newId = -1; //forcing an error 
    return sequelize.query('select generate_pessoa_seq() as nextId;',{ 
     nest: true, 
     raw: true }).then(function(response){ 
     //getNewId(); 
     var stringId = response[0]; 
     newId = parseInt(stringId.nextId, 10); 
     hook.data.IdiPessoa=newId; 
     return hook; 
     }).error(function(err){ 
     console.log(err); 
     return hook; 
     }); 
    } 
    } 
}); 
関連する問題