I have been trying to understand the difference between HQL and JPQL. The hibernate documentation at here
suggest that writing select is necessary for JPQL but not in HQL. But when I try writing HQL or JPQL inside Query annotation of spring data JPA , both HQL and JPQL works .
import java.util.List; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; public interface UserRepository extends CrudRepository<User, Long> { @Query(value = "from com.demo.spring.data.jpa.User u") public List<User> findAllUsersHQL(); @Query(value = "select u from com.demo.spring.data.jpa.User u") public List<User> findAllUsersJPQL(); } My understanding is since the Query annotation is intended for JPA why is HQL supported ?
Or let me put in other words -
Can we write HQL in the Query annotation - Does spring data JPA supports both ?
A JPQL query is always a valid HQL query, the reverse is not true however.. Because it's a valid HQL (with and without select), it's also a valid JPQL. I don't know why the documentation is telling something different.