Ehab Al-Hakawati
Ehab Al-Hakawati

Reputation: 992

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

Upvotes: 4

Views: 24289

Answers (4)

Charles Raimond
Charles Raimond

Reputation: 11

you can also use @NativeQuery option

Upvotes: 1

Ehab Al-Hakawati
Ehab Al-Hakawati

Reputation: 992

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 )

Upvotes: 8

manocha_ak
manocha_ak

Reputation: 902

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

Upvotes: 0

ezgi
ezgi

Reputation: 376

"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?

Upvotes: 5

Related Questions