Spring Boot自定义Repository开发遇QuerySyntaxException问题求助
解决QuerySyntaxException: Transactions is not mapped错误
这个错误源于Hibernate无法找到对应名称的实体映射,以下是具体排查和解决步骤:
1. 确认实体类被Spring Boot扫描到
Spring Boot默认扫描启动类所在包及其子包下的@Entity类,若Transactions实体不在该范围内,需在启动类添加@EntityScan注解指定实体包路径:
@SpringBootApplication @EntityScan(basePackages = "com.yourproject.entity") // 替换为你的实体类实际所在包 public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 检查实体类的@Entity注解
确保实体类的@Entity注解来自正确的包,Spring Boot 2.3.3.RELEASE使用的是javax.persistence.Entity,而非Jakarta版本:
import javax.persistence.Entity; import javax.persistence.Table; // 其他必要导入 @Data @Entity @Table(name = "transactions") public class Transactions implements Serializable { // 实体字段 }
3. 验证HQL语句的实体类名
HQL语句中需使用实体类的Java类名(区分大小写),而非数据库表名。你的语句SELECT pl FROM Transactions pl本身正确,需确认无拼写错误(比如误写为Transaction少了s)。
4. 检查自定义Repository实现的配置
确认TransactionsRepositoryCustomImpl中的EntityManager注入正常,且关联的持久化单元包含Transactions实体。可通过以下代码验证实体是否被加载,若抛出异常则说明实体未被映射:
entityManager.getMetamodel().entity(Transactions.class);
额外排查点
检查application.properties/application.yml中的JPA配置,确保映射验证相关配置正确:
spring.jpa.hibernate.ddl-auto=validate spring.jpa.show-sql=true
内容的提问来源于stack exchange,提问作者Devid Joshua
相关产品推荐
相关产品推荐

