2013-08-22 2 views
0

Провел несколько дней, пытаясь понять, почему это не работает. Моя модель Player-[:PLAYED_WITH_TEAM]->team-[:CONTESTED_IN]->league. Несколько примеров этого соотношения следующим образомне удалось создать более двух одинаковых отношений между двумя узлами

bob-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League 
alice-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->ABC League 
bob-[:PLAYED_WITH_TEAM]->falcons-[:CONTESTED_IN]->XYZLeague 

Боб играл за одну команду «Соколы» в двух лье ABC и XYZ. Это тот факт, который я хочу захватить. Поскольку Боб играл за ту же команду в 2 разных лигах, мне нужно иметь два отношения PLAYED_WITH_TEAM между теми же начальными (Bob) и конечными (Falcons) узлами.

Я использую данные весны и определены сущности. Я могу создать 2 таких отношения, но не более двух, используя весенние данные. т. е. если боб играл за ту же команду Falcons за третью лигу, я не могу создать это третье отношение. Я не уверен, где проблема. Ниже мой код для создания нового отношения. PlayedWith является RelationshipEntity с Player в качестве стартового узла и Team в качестве конечного узла.

private PlayedWith createPlayedWithRelation(League currentLeague, Team team, Player p) 
    { 
     System.err.println("Creating PLAYED_WITH_TEAM relation between " + team + " and " + p + " and " + currentLeague); 

     PlayedWith playedWith = template.createRelationshipBetween(p, team, PlayedWith.class, "PLAYED_WITH_TEAM", true); 
     playedWith.setDuring(currentLeague.getStartDate()); 
     playedWith.setInLeague(currentLeague); 
     playedWith.setPlayer(p); 
     playedWith.setTeam(team); 
     playedWith.setAsCaptain(p.isCaptain()); 

     team.addPlayer(p); 
     template.save(playedWith); 

     return playedWith; 
    } 

PlayedWith

@RelationshipEntity (type = "PLAYED_WITH_TEAM") 
public class PlayedWith 
{ 
    @GraphId 
    private Long nodeId; 

    @StartNode 
    Player player; 

    @Fetch 
    @EndNode 
    Team team; 
} 

Позвольте мне знать, если есть альтернативный способ хранения этого сценария.

ответ

0

Вам не нужно добавить еще одну связи между Бобом и соколами, но между соколами и новой лигой, как это:

(falcons)-[:CONTESTED_IN]->(NEWLeague) 

Как боб играет за соколы и сокол затем оспариваемых в ABC Лиге, XYZ League и NEW League bob неявно играют в этих трех лигах.

+0

Это была моя первоначальная модель, но этот подход имеет недостаток. Как вы можете найти игроков Falcon, которые играли только в лиге XYZ? Игрок может не играть во всех лигах. –

+0

Тогда вам нужно другое отношение от игрока к лиге. – h3nrik

0

На самом деле должно быть только одно: отношение PLAYED_WITH_TEAM между bob и соколами. Вы уверены, что ваш запрос прав для получения суммы: PLAYED_WITH_TEAM отношений между Бобом и соколами?

Из справочной документации SDN:

Примечание

Spring Data Neo4j обеспечивает по умолчанию, что есть только один отношения данного типа между любыми двумя данными сущностями. Это можно обходить с помощью метода createRelationshipBetween() с параметром allowDuplicates в репозиториях или сущностях.

Смежные вопросы