You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EJB+JPA访问MySQL时遇org.hsqldb.HsqlException异常求助

问题:EJB+JPA查询MySQL表时提示ALUMNOS不存在

我是一名学生,正在IntelliJ中使用EJB和JPA开发简单Web应用,目标是从MySQL数据库的notasexample库中查询并打印alumnos表的数据列表。

EJB代码

@Stateless
public class AlumnosBean {

    @PersistenceContext
    private EntityManager entityManager;

    public List<Alumnos> getAlumnos() {
        Query query = entityManager.createQuery("SELECT a FROM Alumnos a");
        List<Alumnos> resultList = query.getResultList();
        return resultList;
    }
}

Servlet代码

@WebServlet(name = "ListAlumnos", value = "/ListAlumnos")
public class ListAlumnos extends HttpServlet {
    @EJB
    private AlumnosBean alumnosBean;

    public void init() {
       
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Alumnos> alumnos = alumnosBean.getAlumnos();
        request.setAttribute("alumnos", alumnos);
        request.getRequestDispatcher("/alumnos.jsp").forward(request, response);
    }

    public void destroy() {
    }
}

Alumnos实体类

@Entity
@Table(name = "alumnos", schema = "notasexample")
public class Alumnos {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Size(max = 25)
    @NotNull
    @Column(name = "nombre", nullable = false, length = 25)
    private String nombre;

    @Size(max = 25)
    @NotNull
    @Column(name = "nom_user", nullable = false, length = 25)
    private String nomUser;

    @Size(max = 25)
    @NotNull
    @Column(name = "password", nullable = false, length = 25)
    private String password;

    @NotNull
    @Column(name = "nota", nullable = false)
    private Float nota;

    @NotNull
    @Column(name = "modulo", nullable = false)
    private Integer modulo;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNomUser() {
        return nomUser;
    }

    public void setNomUser(String nomUser) {
        this.nomUser = nomUser;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Float getNota() {
        return nota;
    }

    public void setNota(Float nota) {
        this.nota = nota;
    }

    public Integer getModulo() {
        return modulo;
    }

    public void setModulo(Integer modulo) {
        this.modulo = modulo;
    }

}

persistence.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
             version="3.0">
    <persistence-unit name="CRUDWeb">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.car.crudweb.entities.Alumnos</class>
        <class>com.car.crudweb.entities.Historial</class>
        <class>com.car.crudweb.entities.Modulos</class>
        <class>com.car.crudweb.entities.Profesores</class>
        <properties>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/notasexample"/>
            <property name="jakarta.persistence.jdbc.user" value="root"/>
            <property name="jakarta.persistence.jdbc.password" value=""/>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="jakarta.persistence.schema-generation.database.action" value="none"/>
            <property name="jakarta.persistence.schema-generation.scripts.action" value="none"/>
            <property name="hibernate.default_schema" value="notasexample"/>
        </properties>
    </persistence-unit>
</persistence>

异常信息

嵌套异常

jakarta.ejb.EJBException: The bean encountered a non-application exception; nested exception is:
jakarta.persistence.PersistenceException: Converting org.hibernate.exception.SQLGrammarException to JPA PersistenceException : could not prepare statement

根因异常

org.hsqldb.HsqlException: user lacks privilege or object not found: ALUMNOS

已排查情况

  • 确认MySQL数据库notasexample中存在alumnos表
  • 配置的root用户拥有全部权限
  • 在JPA控制台执行相同的JPQL查询可以正常返回数据

程序运行时却报错,求解决办法。

内容的提问来源于stack exchange,提问作者Kokomo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:17:24