Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to retrieve an aggregation function query with spring-data-jpa

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

like image 908
Ehab Al-Hakawati Avatar asked Dec 08 '22 17:12

Ehab Al-Hakawati


1 Answers

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 )

like image 80
Ehab Al-Hakawati Avatar answered Dec 11 '22 07:12

Ehab Al-Hakawati