Reputation: 992
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
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
Reputation: 902
You can have @Query for custom queries for your unsupporeted methods in spring-data.
Upvotes: 0
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