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

如何用JPA实现SQL Server简单插入?插入失败及配置疑问

关于Hibernate插入失败与配置文件的问题解答

嘿,我来帮你捋清楚这个问题!首先明确说:是的,Hibernate必须要有核心配置(要么是hibernate.cfg.xml文件,要么用代码硬编码配置参数)才能正常和数据库交互,你现在遇到的插入操作没执行、主类报错,大概率就是因为缺少这个关键配置。

一、为什么Hibernate需要这个配置?

Hibernate作为ORM框架,得知道一堆关键信息才能干活:

  • 怎么连你的SQL Server?(连接URL、用户名、密码)
  • 用什么SQL方言适配SQL Server?
  • 哪些类是实体类?(比如你的Personel)
  • 是否自动创建/更新数据库表?
  • 要不要显示执行的SQL方便调试?

这些信息如果不告诉Hibernate,它根本不知道该怎么操作数据库,自然会报错。

二、给你一份适配SQL Server的hibernate.cfg.xml示例

把这个文件放在项目的src/main/resources目录下(Maven/Gradle项目)或者src根目录里:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 数据库连接参数,替换成你自己的信息 -->
        <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=你的数据库名;encrypt=true;trustServerCertificate=true</property>
        <property name="hibernate.connection.username">你的数据库用户名</property>
        <property name="hibernate.connection.password">你的数据库密码</property>

        <!-- SQL Server对应的方言,根据你的版本调整 -->
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</property>

        <!-- 告诉Hibernate你的实体类在哪 -->
        <mapping class="JpaTestPackage.Personel"/>

        <!-- 调试用:显示执行的SQL语句 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>

        <!-- 表生成策略,开发环境用update很方便,生产环境别乱用 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
    </session-factory>
</hibernate-configuration>

三、主类里要正确加载配置并处理事务

你的JavaJpaTestImpl得这么写才能正常执行插入,尤其是事务提交这一步绝对不能忘:

package JpaTestPackage;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class JavaJpaTestImpl {
    public static void main(String[] args) {
        // 加载Hibernate配置文件
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

        Session session = null;
        try {
            session = sessionFactory.openSession();
            // 一定要开启事务
            session.beginTransaction();

            // 创建你的Personel实例,设置属性
            Personel person = new Personel();
            person.setXXX("对应属性值"); // 替换成你实体类里的属性

            // 保存实体
            session.save(person);

            // 提交事务!这步没做的话,数据根本不会写入数据库
            session.getTransaction().commit();
            System.out.println("数据插入成功啦!");
        } catch (Exception e) {
            // 出错了就回滚事务
            if (session != null && session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            e.printStackTrace();
        } finally {
            // 别忘了关闭资源
            if (session != null) session.close();
            sessionFactory.close();
        }
    }
}

四、还要排查这些坑

  • 实体类的主键注解:你给的Personel代码里没显示主键部分,一定要给主键字段加上@Id注解(比如@Id private Long id;),Hibernate要求所有实体必须有主键。
  • 事务没提交:很多新手会忘了调用commit(),导致Hibernate只是缓存了数据,根本没写入数据库。
  • 数据库权限:确认你的数据库用户有插入数据的权限,别因为权限不足导致操作失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:53:10