JPQL是否支持*符号?为何需用实体别名替代?
JPQL语法疑问解答:实体别名与*符号的使用
你的代码实现:
@Repository public interface ParticipantRepository extends CrudRepository<Participant,Integer> { @Query("select e from Participant e WHERE e.event.venue =:venue") List<Participant> getParticipantsByEventVenue(String venue); }
问题解答:
使用别名替代SQL中
*是JPQL的固有语法
JPQL是面向实体对象的查询语言,它操作的是Java实体类而非数据库表。当你需要查询整个实体实例时,必须通过别名(比如代码里的e)来指代目标实体,这是JPQL的标准写法,作用等同于SQL里的select *,但逻辑上是选中整个实体对象,而非数据库表的所有列。JPQL中不存在
*符号
SQL里的*用于选中表的所有列,但JPQL没有这个语法。如果要查询整个实体,直接写实体别名即可;如果要查询实体的特定属性,需要明确指定属性名(比如select e.name from Participant e),没有用*指代所有属性的写法。另外,JPQL还允许省略select子句,直接写from Participant e where ...,效果和select e from Participant e完全一致。
内容的提问来源于stack exchange,提问作者java beginner
相关产品推荐
相关产品推荐

