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

OpenXava连接SQL Server 2019报错:无法执行Record动作

OpenXava 连接 SQL Server 2019 构建 Hibernate SessionFactory 失败问题

问题描述

尝试将 OpenXava 与 SQL Server 2019(15.0.2104)连接,已在 context.xml 和 persistence.xml 中配置相关选项,程序可正常打开页面并输入信息,但点击「record」按钮时触发错误:

无法执行Record动作: [PersistenceUnit: default ] 无法构建Hibernate SessionFactory

已完成前置操作:

  • SQL Server 已启用 TCP IP 选项
  • 已创建目标数据库及带登录权限的用户
  • 项目通过 git clone https://github.com/solee2222/CLINIC.git 获取

现有配置文件

persistence.xml 配置

<properties>
    <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="hibernate.connection.username" value="user"/>
    <property name="hibernate.connection.password" value="123"/>
    <property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;databaseName=facturaciondb;encrypt=true;trustServerCertificate=true;"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
    <property name="hibernate.hbm2ddl.auto" value="update"/>
    <property name="hibernate.show_sql" value="true"/>
</properties>

context.xml 配置

<!-- Microsoft SQL Server -->
<Resource name="jdbc/facturacionDS" auth="Container" type="javax.sql.DataSource"
      maxTotal="20" maxIdle="5" maxWaitMillis="10000"
      username="user" password="123" 
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 

pom.xml 配置

<!-- Microsoft SQL Server -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.4.1.jre11</version>
</dependency>

排查与解决步骤

1. 补全 context.xml 配置

你提供的 context.xml 代码不完整:<Resource> 标签未闭合,且缺少数据库连接URL配置项。完整的SQL Server数据源配置需添加 url 属性并闭合标签,示例:

<!-- Microsoft SQL Server -->
<Resource name="jdbc/facturacionDS" auth="Container" type="javax.sql.DataSource"
      maxTotal="20" maxIdle="5" maxWaitMillis="10000"
      username="user" password="123" 
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
      url="jdbc:sqlserver://localhost:1433;databaseName=facturaciondb;encrypt=true;trustServerCertificate=true;"/>

配置不完整会导致数据源初始化失败,直接引发Hibernate SessionFactory构建错误。

2. 修正Hibernate方言适配

SQL Server 2019 需使用更适配的方言,替换 persistence.xml 中的方言配置:
将

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>

改为

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>

SQLServerDialect 是旧版通用方言,对SQL Server 2019的新特性支持不足,可能导致DDL生成或会话创建失败。

3. 消除数据源与Hibernate配置冲突

OpenXava推荐通过容器数据源(context.xml 配置)获取连接,此时 persistence.xml 无需重复配置连接参数。建议修改 persistence.xml,移除直接连接配置,改为引用数据源:

<persistence-unit name="default" transaction-type="JTA">
    <jta-data-source>java:comp/env/jdbc/facturacionDS</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.show_sql" value="true"/>
    </properties>
</persistence-unit>

重复配置会导致Hibernate无法确定连接方式,引发会话工厂构建异常。

4. 验证JDBC驱动版本兼容性

你使用的 mssql-jdbc:12.4.1.jre11 适配Java 11,需确认OpenXava项目运行环境为Java 11。若项目使用Java 8,需降级驱动版本至 9.4.1.jre8,避免版本不兼容导致驱动加载失败。

5. 检查数据库用户权限

确保数据库用户 user 拥有对 facturaciondb 的创建表、修改表权限(因 hibernate.hbm2ddl.auto=update 需要执行DDL操作)。可通过SQL Server Management Studio执行以下语句授权:

USE facturaciondb;
GRANT CREATE TABLE, ALTER TABLE, SELECT, INSERT, UPDATE, DELETE TO [user];

6. 查看详细错误日志

若以上步骤未解决问题,需查看更详细的Hibernate报错日志。日志通常位于项目运行目录的 logs 文件夹,或应用服务器(如Tomcat)的 logs/catalina.out 文件,日志会包含SessionFactory构建失败的具体原因(如连接超时、SQL语法错误、权限不足等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:44