Как посчитать таблицу строк в JPA Query - PullRequest
0 голосов
/ 09 января 2019

Я новичок в Spring Boot. У меня есть база данных mysql, я использую запрос для подсчета строк в моей таблице. Но это не работа, она все еще возвращает мои исходные данные таблицы. Можете ли вы помочь мне проверить мой код.

Вот моя сущность:

@Entity
@Table(name = "act_id_membership", schema = "activiti", catalog = "")
@IdClass(ActIdMembershipEntityPK.class)
public class ActIdMembershipEntity {
    private String userId;
    private String groupId;

    @Id
    @Column(name = "USER_ID_")
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Id
    @Column(name = "GROUP_ID_")
    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ActIdMembershipEntity that = (ActIdMembershipEntity) o;
        return Objects.equals(userId, that.userId) &&
                Objects.equals(groupId, that.groupId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(userId, groupId);
    }
}

Вот мой запрос:

@Repository
public interface MemershipRepository extends JpaRepository<ActIdMembershipEntity, String> {
    @Query ("select new com.example.activiti_restful.dtos.UserMembership(i.userId, count(i)) from ActIdMembershipEntity i where i.userId ='kermit'")
    UserMembership countMemberships(String userId);
}

Обновленный код: Мой класс обслуживания:

@Service
public class MembershipService {
@Autowired
private MemershipRepository repository;

public long count() {
    return repository.count();
}

Мой класс ресурсов:

@RestController
public class MembershipResource {
@Autowired
private MembershipService membershipService;

@GetMapping("/membership")
public long list() {return membershipService.count();}
}

Мой пользовательский класс объектов JSON:

public class UserMembership {
    private String userId;

    private long numberOfusers;

    public UserMembership(String userId, long numberOfusers) {
        this.userId = userId;
        this.numberOfusers = numberOfusers;
    }
} 

MySQL Table: act_id_membership

Ответы [ 2 ]

0 голосов
/ 09 января 2019

*> На самом деле я хочу, чтобы он возвращал формат json, например, [{name: kermit, value: 6}]. Теперь он просто возвращает только номер 6. Как я могу это сделать? Спасибо!

Сначала создайте класс для переноса ваших данных:

public class UserMembership {

 private String userId;

 private long numberOfUsers;

 public UserMembership(String userId, long numberOfUsers) {
       this.userId = userId;
       this.numerOfUsers = numberOfUsers;     
 }

}

Тогда

@Repository 
public interface MembershipRepository extends JpaRepository <ActIdMembershipEntity, String> {
     @Query ("select new *****.UserMembership(i.userId, count(i)) from ActIdMembershipEntity i where i.userId = :userId")
     UserMembership countMemberships(String userId);
}

*****: полное имя пакета

Надеюсь, это поможет!

0 голосов
/ 09 января 2019

Согласно документации для репозиториев с использованием CrudRepository предоставляется метод, называемый count () , который является из суперинтерфейсов , который реализован JpaRepository.

На основе Документация CrudRepository говорит:

длинный счет (); Возвращает количество сущностей.

Тогда вам следует использовать CrudRepository метод. Кроме того, удалите Uppercase MembershipREPOSITORY, согласно условному обозначению java-кода , вы должны использовать следующий способ MembershipRepository.

 @Repository
 public interface MembershipRepository extends JpaRepository <ActIdMembershipEntity, String> {
 }

И используйте его в своем сервисе:

 @Service
 public class MembershipService {

     @Autowired
     private MembershipRepository repo;

     public long count() {
         return repo.count();
     }
 }

ОБНОВЛЕНО

На основании вашего требования: В контроллере:

@RestController
public class MembershipResource {

    @Autowired
    private MembershipService membershipService;

    @GetMapping("/membership")
    public List<Object> list() { return membershipService.countMemberships();
    }
}

В службе:

@Service
public class MembershipService {

    @Autowired
    private MemershipRepository repository;

    public List<Object> countMemberships() {
        return repository.countMemberships();
    }

}

В репозитории:

@Repository
public interface MemershipRepository extends JpaRepository<ActIdMembershipEntity, String> {
    @Query ("select i.userId, count(i) from ActIdMembershipEntity i where i.userId ='kermit'")
    List<Object> countMemberships();
}
...