2016-07-14 1 views
0

Ich habe die folgenden SpaltenFrühling JPA Ausnahme bei rekursiven

ID username placementID sponsorID 
4 G1    3  3 
5 G2    4  4 
6 G3    5  5 
3 mzys  null null 

Ich versuche, JPA zu verwenden, wie viele Nutzer sind von mzys auf der 3. Generation zu zählen.

Die Antwort sollte eine sein, weil mzys> G1> G2> G3

Allerdings, wenn ich

verwenden
userRepository.countByPlacementPlacementPlacementUsername(placementPlacementPlacement.getUsername()) 

Es gibt mir

java.util.NoSuchElementException 
    at java.util.ArrayList$Itr.next(Unknown Source) 
    at java.util.Collections$UnmodifiableCollection$1.next(Unknown Source) 
    at org.springframework.data.jpa.repository.query.CriteriaQueryParameterBinder.bind(CriteriaQueryParameterBinder.java:63) 

UPDATE

Benutzer .java

@Entity 
@Table(name = "USER") 
public class User extends BasePersist<UserBO> { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "PLACEMENT_ID", referencedColumnName = "ID", nullable = true) 
    private User placement; 

    ... 

Jetzt versuche ich, meine eigene Abfrage mit

@Query(value="select count(u.id) from User u " 
      + "left join u.placement u1 on u.placement.id = u1.placement.id " 
      + "left join u.placement u2 on u1.placement.id = u2.placement.id " 
      + "left join u.placement u3 on u2.placement.id = u3.placement.id " 
      + "where u3.username =?1 and deletedflag =?2") 
    int countByPlacementPlacementPlacementUsername(String username, boolean deletedFlag); 

und ich

erhalten zu schreiben
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause referenced two different from-clause elements 

Jede Idee, warum dies geschieht? Gibt es einen besseren Weg, um das zu erreichen, was ich brauche?

+0

Könnte sein, dass Sie nicht zu 'u3.deletedFlag' angeben es genaue Einheit für deletedflag Eigenschaft – Stan

+0

musste ich ändern. Das war jedoch nicht der Hauptschuldige. – abiieez

Antwort

0

Das Hauptproblem war mit ON Wort. Nachdem ich es entfernt hatte, ging das Problem weg.

@Query(value="select count(u.id) from User u " 
      + "left outer join u.placement u1 " 
      + "left outer join u.placement u2 " 
      + "left outer join u.placement u3 " 
      + "where u3.username =?1 and u3.deletedFlag =?2") 
    int countByPlacementPlacementPlacementUsername(String username, boolean deletedFlag); 
Verwandte Themen