2017-12-07 6 views
0

Der Zweck dieses Codes ist es, einem Benutzer zu ermöglichen, eine ID zu überprüfen; In diesem Fall wäre es eine ID, um einen Wettbewerb eines bestimmten Sports zu überprüfen, um das relevante Spiel und seine Details zu sehen. Der Zweck war, den Benutzer darüber zu informieren, dass wenn er eine falsche ID eingegeben hatte, ich einfach eine Nachricht innerhalb der SOAP-Anfrage erzeugen wollte, die darüber informierte, dass die eingegebene competitionID falsch war. Wenn ich meinen Code debugge, bin ich mit einem Fehler konfrontiert "LazyInitializationException: versäumt, eine Sammlung von Rolle zu initialisieren", irgendwelche Ideen?LazyInitializationException - konnte eine Sammlung von Rollen nicht initialisieren

public void CompetitionIdChecker(Set<RestrictionFailure> failures, CompetitionSetup competition) { 
    Long compId21 = Long.valueOf(competition.getCompetitionId()); 
    try { 
     Node competitionNode = nodeDao.findById(competition.getCompetitionId()); 
     Set<Node> childNodes = competitionNode.getChildNodes(); 
     Iterator<Node> nodeItr = childNodes.iterator(); 
     Node feedNode = nodeItr.next(); 
     Feed incidentFeed = competition.getIncidentProvider(); 
     Node Node = null; 
     if (incidentFeed.name().equalsIgnoreCase(feedNode.getSys().getCode())) { 
      Node = feedNode.findLinkedNode(new SystemKey(incidentFeed.name())); 
     } 
     if (Node != null) { 
      // as node is set as final level in nodes hierarchy 
      if (Node.getChildNodes().size() > 0) { 
       System.out.println("it is not valid"); 
       failures.add(new RestrictionFailure("Competition ID does not exist in Nodes table")); 
      } else { 
       System.out.println("compId is valid"); 
      } 

     } 
    } catch (Exception e) { 
     LOGGER.error("Error getting competition id", e); 
     // rollback(tx); 
    } 
} 

Antwort

0

Die Standardzuordnung eines Viele-zu-Eins-Beziehung auf träges Laden eingestellt. Dies bedeutet, dass untergeordnete Knoten beim Abrufen des übergeordneten Objekts nicht abgefragt werden. Dies ist sinnvoll, da Sie andernfalls alle Relationen eines übergeordneten Objekts abfragen würden, selbst wenn Sie es nie verwenden würden. Wenn Sie auf solche untergeordneten Objekte zugreifen, erhalten Sie eine LazyLoadingException. Um dies zu umgehen, können Sie entweder das Mapping auf nicht faul setzen oder eine Abfrage erstellen, die die untergeordneten Elemente abruft. Bitte werfen Sie einen Blick auf Fetch-Joins. https://docs.jboss.org/hibernate/orm/3.5/reference/de-DE/html/queryhql.html#queryhql-joins

Verwandte Themen