hibernate报ExceptionInInitializerError错误

本文记录了一次使用Hibernate Criteria接口进行查询时遇到的ExceptionInInitializerError异常及HibernateException异常的过程。通过实例分析发现,问题根源在于实体类中缺少必要的getter和setter方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在练习hibernate的criteria接口查询时候报了错:

java.lang.ExceptionInInitializerError
at test.testThisPro.createCriteria(testThisPro.java:23)--->Session session = HibernateSessionFactory.getSession();

但是这个引用的没错。同时xml文件检查也没有错误.

后来用原始的方法获取会话:

/*Configuration cfg=new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();*/报下面的错:

org.hibernate.HibernateException: Unable to instantiate default tuplizer

请老师看后,Emp类中引用的Dept属性没有get/set方法。

转载于:https://www.cnblogs.com/FieryYouth/p/5566038.html

### Java 单元测试中处理 `ExceptionInInitializerError` 的策略 在编写单元测试过程中遇到 `ExceptionInInitializerError` 表明被测类的静态初始化部分遇到了未捕获的异常[^1]。此类错误可能源于多种情况,比如除零操作、资源文件缺失或是第三方库版本不兼容等问题。 为了有效地应对这一挑战,在定位并修复具体引发此异常的根本原因之前,可以采取如下措施来增强代码健壮性和可测试性: #### 方法一:重构静态初始化逻辑 通过减少或消除复杂的静态初始化过程,降低潜在风险点。例如将复杂度较高的初始化工作推迟到实例化对象之后再执行,即采用懒加载模式。 ```java public class MyClass { private static final Resource resource; static { try { // 原始方式可能会导致 ExceptionInInitializerError resource = loadResource(); } catch (IOException e) { throw new RuntimeException(e); } } public static synchronized void initialize() throws IOException { if (resource == null) { resource = loadResource(); // 改进后的延迟加载机制 } } } ``` #### 方法二:利用 JUnit 规则或扩展功能绕过问题区域 JUnit 提供了一些工具可以帮助开发者更好地管理测试环境中的依赖关系。对于那些难以模拟其行为的对象(如单例),可以通过自定义 Runner 或 Rule 来实现更灵活的行为替换。 ```java @RunWith(MockitoJUnitRunner.class) public class MyTest { @Mock private Dependency dependency; @Before public void setUp(){ mockStatic(MyClass.class); when(MyClass.getResource()).thenReturn(mockedResource()); } @Test public void testMethod() { /* 测试主体 */ } } ``` #### 方法三:调整构建配置排除干扰因素 有时项目中存在的某些编译期优化选项也可能间接影响到运行时的表现形式。因此适当修改 Maven/Gradle 构建脚本里的参数设置,确保所有必要的资源都能正常访问是非常重要的一步。 ```xml <build> <plugins> <!-- 配置插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire.version}</version> <configuration> <argLine>-Dfile.encoding=UTF-8 -Xmx512m</argLine> </configuration> </plugin> </plugins> </build> ``` 以上三种方案可以根据实际情况组合运用,从而达到既不影响原有业务逻辑又能顺利完成自动化测试的目的。值得注意的是,最根本有效的办法还是在于深入理解所使用的框架特性以及遵循良好的编码实践习惯,尽可能提前预防可能出现的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值