Rajneesh Mishra
Rajneesh Mishra

Reputation: 248

what is the right jpa query to get some column from table instead of all table data

I am getting this given exception

Exception in thread "Thread-2" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.freeGo.model.Pump at com.freeGo.util.HealthTask.run(HealthTask.java:33) at java.lang.Thread.run(Thread.java:745)

My code is :

@Query("SELECT p.id, p.timestamp FROM Pump p WHERE p.isActive = :isActive")
 public List<Pump> findByIsActive(@Param("isActive") int isActive);

if i don't use Query annotation as

public List<Pump> findByIsActive(@Param("isActive") int isActive);

then it's run successfully, but it return's all table data but i want only 2 column.

My project in spring-3 and jpa.

Upvotes: 0

Views: 4927

Answers (1)

K.Nicholas
K.Nicholas

Reputation: 11551

There is nothing wrong with the query, if that's what you want. You will be getting a object[] (object array) from the query instead of a List<Pump>. So, make the return type List<Object[]> and get id in column 0 and time in column 1.

If you want to make it a little better code, you should probably get the query to return a custom DTO.

@Query("SELECT new MyDto(p.id, p.timestamp) FROM Pump p WHERE p.isActive = :isActive")

and return a List<MyDto>

Reference: Spring JPA selecting specific columns

Upvotes: 4

Related Questions