CRUD-репозиторий Query с вложенным выбором и несколькими таблицами - PullRequest
0 голосов
/ 08 апреля 2020
@Entity
@Table(name="IG_USER")
public class IgUser implements Serializable {

    private static final long serialVersionUID = 1L;

    public IgUser() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Id
    @Column(name="IG_USER_ID", nullable=false)
    private String igUserId;

    @JsonManagedReference
    @OneToMany(targetEntity=IgGroupUser.class,cascade= CascadeType.ALL, mappedBy="igUser", fetch=FetchType.LAZY)
    private List<IgGroupUser> igGroupUsers;

}

IG_GROUP_USER - это другая таблица

@Entity
@Table(name = "IG_GROUP_USER")
public class IgGroupUser implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="IG_GROUP_ID")
    private String igGroupId;

    @Column(name="USER_NAME")
    private String userName;

    @Column(name="USER_EMAIL")
    private String userEmail;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "IG_USER_ID")
    private IgUser igUser;

    @OneToOne(mappedBy="igGroupUser",cascade = CascadeType.ALL)
    private Password password;
}

Класс DTO

@Data
public class TrusteesListDto {
    private String userName;
    private String userId;
    private Integer userCount;

    public TrusteesListDto( String userName, String userId) {
        this.userName = userName;
        this.userId = userId;
    }
    public TrusteesListDto() {
    }

}

Репозиторий

public interface IwagUserRepository extends CrudRepository<IgUser, String> {

@Query("SELECT new com.vzw.roms.romsapp.dto.TrusteesListDto(igu.userName,iu.igUserId) " +
             "FROM IgUser iu "+
             "INNER JOIN iu.igGroupUsers igu")
List<TrusteesListDto> findByUserIdAndGroupId();
}

Приведенный выше код работает, но когда я пытаюсь добавить ниже запрос, его ошибка броска. Может кто-нибудь, пожалуйста, помогите мне в этом.

@Query("SELECT new com.vzw.roms.romsapp.dto.TrusteesListDto(igu.userName,iu.igUserId, iguc.cnt) " +
             "FROM IgUser iu "+
             "INNER JOIN iu.igGroupUsers igu," +
             "(SELECT igu2.igUserId,count(*) cnt FROM iu.igGroupUsers igu2 " +
             "WHERE igu2.igUserId != igu2.igGroupId group by igu2.igUserId) iguc")

Сообщение об ошибке: неожиданный токен: (рядом со строкой 1

После добавления вложенного выбора я получаю эту ошибку, Я что-то пропустил? I Я добавил этот счетчик и в класс DTO. Я пытался получить его как interger / long, так как пытался. Добавил также в конструктор, но он не работал.

private Integer userCount;
or
private Long userCount;
...