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

使用JPA操作MySQL无法找到数据持久化存储位置

问题核心原因

你的persistence.xml中持久化单元的事务类型配置为JTA,按照JPA规范,JTA事务模式下,应用服务器(NetBeans默认绑定的GlassFish/Payara等)会优先使用自身内置的数据源,你配置的javax.persistence.jdbc.*系列连接参数会被直接忽略。
你当前的业务数据实际存储在应用服务器默认的H2内置数据库中,没有写入你本地MySQL的newlmstest库。

排查修正步骤

  • 确认应用服务器的默认数据源配置:NetBeans默认Web项目使用的GlassFish/Payara服务器默认数据源为jdbc/__default,底层是H2数据库,若为内存模式,重启服务器后数据会直接丢失。
  • 修正持久化配置:
    方案1:改用RESOURCE_LOCAL事务类型,即可读取你配置的JDBC参数连接MySQL,修改persistence-unit标签属性为<persistence-unit name="primefaces-jsf-pu" transaction-type="RESOURCE_LOCAL">
    方案2:保留JTA模式,先在应用服务器后台手动配置指向newlmstest库的MySQL数据源,再在persistence-unit中添加<jta-data-source>你配置的数据源名称</jta-data-source>标签指定数据源。
  • 额外校验:你当前配置的javax.persistence.jdbc.password值为(),若你的MySQL root用户实际密码为空,需要将该属性值改为空字符串,否则即使修正事务类型也会因为密码错误连接失败。
  • 验证表生成:可在persistence.xml的properties节点中添加SQL打印参数,确认建表语句执行位置:
    若使用EclipseLink(GlassFish默认JPA实现)添加:<property name="eclipselink.logging.level.sql" value="FINE"/>
    若使用Hibernate添加:<property name="hibernate.show_sql" value="true"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:00