hibernate 中常见的错误问题集合

7 篇文章 0 订阅
3 篇文章 0 订阅
1. 配置文件与视频中的一致,但进行JUnit 测试时,控制台显示的结果为表不存在。
解:
    在配置文件中有指定自动生成数据表的策略:
<property name="hbm2ddl.auto">update</property>
    而在Mysql数据库中引擎engine = InnoDB,即本身支持事务。那么,在hibernate 设定的


时候就无需再指定了。如果指定则会发生错误。
    如果Mysql 数据库的设定是不支持事务的话,那么指定方言:


org.hibernate.dialect.MySQL5InnoDBDialect,hibernate就会自动创建支持事务的表。
    即  <!-- hibernate 所使用的数据库方言 -->
 <property 


name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>





2. 建表时发生错误:alter table Order 
        drop 
        foreign key FK48E972E19D16493
Hibernate: 
    alter table Order 
        drop 
        foreign key FK48E972E19D16493 ....


解:
由于在建表的时候存在Order表,而order又是mysql的关键字,故会产生错误。详情


可在该网站 https://stackoverflow.com/questions/15337679/hibernate-unsuccessful-


alter-table 上查阅,问题与我的相似。



3. 能建表,但不能将数据插入(后刷新发现数据插入成功,此时生成数据表的策略为update)。

错误如下:org.hibernate.service.UnknownServiceException: Unknown service 

requested [org.hibernate.stat.spi.StatisticsImplementor]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService

(AbstractServiceRegistryImpl.java:126)
at org.hibernate.internal.SessionFactoryImpl.getStatisticsImplementor

(SessionFactoryImpl.java:1480)
at org.hibernate.internal.SessionFactoryImpl.getStatistics

(SessionFactoryImpl.java:1476)
at org.hibernate.internal.SessionImpl.close(SessionImpl.java:348)
at com.hibernate.helloWorld.HibernateTest.destory(HibernateTest.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall

(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run

(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively

(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunAfters.evaluate

(RunAfters.java:33)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild

(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild

(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run

(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run

(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests

(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests

(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run

(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main

(RemoteTestRunner.java:192)

而控制台并未发现有错误提示。
当数据表的生成策略改为 create 时,控制台出现
org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete   -- hibernate 发出sql 语句时的成功显示
JUite 出现的问题没变。


总结上述问题:即能建表,能插入数据,但Juite 还是报了上述的错误。



解:  
    原因在于先关闭了sessionFactory 的对象再关session 的对象,故而发生该错误。
即错误的代码如下:
sessionFactory.close();
session.close();
正确做法调转上述语句顺序即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值