4

I am using Spring data jpa 1.2 and I can't find anyway to retrieve an aggregate query result like the following one.

select count(v), date(v.createTimestamp) from UserEntity v
    group by date(v.createTimestamp)

Which work perfectly with the native JPA

@Entity()
public class UserEntity {

   @Id
   private long id;
   .
   .
   @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
   private Timestamp createTimestamp;

}

any my JPA repository is

public interface UserRepository extends JpaRepository<UserEntity, Long>, 
      JpaSpecificationExecutor<UserEntity> {
}

so how can I do an aggregate queries throw Spring data, I find absolutely nothing in the documentation

Ehab Al-Hakawati
  • 982
  • 4
  • 11
  • 32

4 Answers4

8

I found a way to do this

public interface UserRepository extends JpaRepository<UserEntity, Long>, 
      JpaSpecificationExecutor<UserEntity> {

      @Query(value = "select count(v), date(v.createTimestamp) from UserEntity v group by date(v.createTimestamp)", 
             countQuery = "select count(1) from (select count(1) from UserEntity v group by date(v.createTimestamp)) z")
      public List<Object[]> findCountPerDay();
}

This way we can get aggregate data along with actual count ( aggregated records )

Ehab Al-Hakawati
  • 982
  • 4
  • 11
  • 32
5

"countBy" is currently not supported in Spring Data:

Support to 'countBy' query methods

Does Spring Data JPA have any way to count entites using method name resolving?

Community
  • 1
  • 1
ezgi
  • 376
  • 2
  • 3
  • 1
    The second you list actually has been updated to reflect that as of spring data 1.7, the countby predicate has been added – chrismarx Jul 21 '15 at 15:47
1

you can also use @NativeQuery option

Bob
  • 5,510
  • 9
  • 48
  • 80
0

You can have @Query for custom queries for your unsupporeted methods in spring-data.

manocha_ak
  • 904
  • 7
  • 19