MySQL JPA Mapping: “QuerySyntaxException: foobar is not mapped…”错误

MySQL JPA Mapping: “QuerySyntaxException: foobar is not mapped…”错误

当我们在使用Java Persistence API (JPA)与MySQL数据库进行数据交互时,可能会遇到以下错误信息:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: foobar is not mapped [SELECT f FROM foobar f WHERE ...]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291)
    ... 104 more

这个错误通常会出现在使用以下代码时:

Query query = entityManager.createQuery("SELECT f FROM foobar f WHERE ...");

错误信息表明,所使用的实体类 “foobar” 没有被映射到数据库中。因此,需要进行MySQL JPA映射配置以解决这个问题。

阅读更多:MySQL 教程

MySQL JPA映射配置

首先,在pom.xml中添加以下依赖项:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.4.28.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.4.28.Final</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.23</version>
</dependency>

然后,在application.yml中添加以下配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: mypassword
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect

其中:

  • url – MySQL数据库连接URL
  • driver-class-name – MySQL JDBC驱动程序类名称
  • username – 数据库用户名
  • password – 数据库密码
  • show-sql – 是否显示SQL语句
  • ddl-auto – Hibernate启动时DDL操作 (create, create-drop, validate, update)
  • dialect – 数据库方言

接下来,在实体类中添加注解以建立实体与数据库表之间的映射关系。例如:一个名为 “foobar” 的表可以用以下实体类来映射:

@Entity
@Table(name = "foobar")
public class Foobar {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    /*其他属性和方法省略*/
}

最后,重新执行查询代码,此次查询应该能够成功执行。

总结

MySQL JPA映射是一个强大的工具,用于在Java应用程序中与MySQL数据库进行数据交互。通过正确的配置和映射实体类,我们可以避免出现 “QuerySyntaxException: foobar is not mapped” 的错误信息并顺利完成查询操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程