Как подсчитать вложенный запрос в Springboot

Я пытаюсь подсчитать количество неудачных попыток входа в систему в день с помощью springboot. На данный момент я обнаружил, что есть countBy, который можно использовать для подсчета, однако я не уверен, как выполнить этот запрос с помощью countBy.

Вот что я хочу сделать:

count all login attempts where date = today'sDate , 
                         loginID = userLoginID 
                         and booleanLoginSuccess = false

Это то, что я пытался сделать в моем LoginRepository:

Long countByTodayDateAndLoginCredentialsIDAndloginSuccessStatusTrue( String currentDate, int loginId);

Это ошибка, которую я получил:

  No property loginCredentialsIDAndloginSuccessStatus found for type LoginInformation!

Это мой объект LoginInformation:

@Entity
@Table(name = "LoginInformation")
public class LoginInformation {

    @JsonIgnore
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int loginID;
    @JsonIgnore
    private Boolean loginSuccessStatus;
    private String deviceID;
    private String appVersion;
    private String deviceOS;
    @JsonIgnore
    private String todayDate;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "loginCredentialsID")
    private UserLogin userLogin;

public LoginInformation() {
}

public LoginInformation(Boolean loginSuccessStatus, String deviceID, String appVersion, String deviceOS) {
    this.loginSuccessStatus = loginSuccessStatus;
    this.deviceID = deviceID;
    this.appVersion = appVersion;
    this.deviceOS = deviceOS;
}

public LoginInformation(Boolean loginSuccessStatus, String deviceID, String appVersion, String deviceOS, String todayDate, UserLogin userLogin) {
    this.loginSuccessStatus = loginSuccessStatus;
    this.deviceID = deviceID;
    this.appVersion = appVersion;
    this.deviceOS = deviceOS;
    this.todayDate = todayDate;
    this.userLogin = userLogin;
}

    ... omitted getter and setters for brevity

Это моя сущность UserLogin:

Entity
@Table(name = "UserLogin",
uniqueConstraints = 
          {
                @UniqueConstraint(columnNames = "userName")
        })
public class UserLogin implements Serializable, UserDetails  {
    @JsonIgnore
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int loginCredentialsID;

    private String username;
    private String password;


    @OneToMany(mappedBy = "userLogin", cascade = CascadeType.ALL)
    private List<LoginInformation> loginInfo = new ArrayList();


    public UserLogin(String username, String password) {
        this.username = username;
        this.password = password;
    }


    public UserLogin() {
    }
... omitted getter and setters for brevity

Пожалуйста, опубликуйте свой код объекта LoginInformation. И, кстати, то, что вы можете использовать методы с ужасно длинными именами, не означает, что вы должны делать это с собой и с будущими несчастными читателями кода.

Ali Dehghani 07.04.2018 10:59

Я добавил объект LoginInfomation и приношу свои извинения за длинные имена

Erent 07.04.2018 11:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следует использовать поля сущностей, а не имена столбцов.

Long countByTodayDateAndUserLoginLoginCredentialsIDAndloginSuccessStatusTrue( String currentDate, int loginId);

userLogin - это объект, поэтому для доступа к его идентификатору добавьте идентификатор в имя метода

я получаю следующую ошибку java.lang.IllegalArgumentException: значение параметра [1] не соответствует ожидаемому типу

Erent 07.04.2018 11:17

Значение параметра [1] не соответствует ожидаемому типу [usermanagementapi.Entities.UserLogin (n / a)]; вложенное исключение - java.lang.IllegalArgumentException: значение параметра [1] не соответствует ожидаемому типу [usermanagementapi.Entities.UserLogin (n / a)] "

Erent 07.04.2018 11:25

Я думаю, что ваш ответ правильный, но знаете ли вы, как решить проблему несоответствия параметров

Erent 07.04.2018 12:18

Я думаю, причина в том, что ваш идентификатор называется loginCredentialsID.

Bogdan Lukiyanchuk 07.04.2018 12:33

Другие вопросы по теме