Puisque ce que vous essayez de faire est une auto-association, vous n'avez besoin d'appeler hasMany qu'une seule fois, ce qui créera une table de jonction
User.hasMany(User, { as: 'Contacts', joinTableName: 'userHasContacts'})
Ce qui créera la table userHasContacts comme :
CREATE TABLE IF NOT EXISTS `userHasContacts` (`userId` INTEGER , `ContactsId` INTEGER , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`userId`,`ContactsId`)) ENGINE=InnoDB;
Pour trouver des utilisateurs et leurs contacts vous pouvez alors faire :
User.find({ where: ..., include: [{model: User, as: 'Contacts'}]})