使用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: Convertingorg.hibernate.exception.SQLGrammarExceptionto JPAPersistenceException: could not prepare statement
根因异常
org.hsqldb.HsqlException: user lacks privilege or object not found: ALUMNOS
已排查情况
- 确认MySQL数据库notasexample中存在alumnos表
- 配置的root用户拥有全部权限
- 在JPA控制台执行相同的JPQL查询可以正常返回数据
程序运行时却报错,求解决办法。
内容的提问来源于stack exchange,提问作者Kokomo
相关产品推荐
相关产品推荐

