使用hibernate annotation出现的异常解决

本文解析了Hibernate在初始化过程中遇到的HibernateDialect未明确设置的问题,并给出了正确的解决方案。
root cause 
java.lang.ExceptionInInitializerError
	cn.tofishes.util.HibernateUtil.<clinit>(HibernateUtil.java:17)
	cn.tofishes.servlet.AddEvent.doGet(AddEvent.java:34)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause 
org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
	org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
	org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
	org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426)
	org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:128)
	org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2073)
	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1298)
	org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	cn.tofishes.util.HibernateUtil.<clinit>(HibernateUtil.java:12)
	cn.tofishes.servlet.AddEvent.doGet(AddEvent.java:34)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

 

出现以上异常,其实不能太怨我,配置文件啥的都没错,尤其是看到Hibernate Dialect,就以为dialect没配置或配置错了,其实不是的,错就错在官方的文档描述上,说下版本:

 

hibernate 3.2 + hibernate-annotations-3.4.0.GA

 

按照hibernate-annotations-3.4.0.GA发布包中的doc\reference\zh_cn中的文档(后注:完了去看了看英文文档,晕,是正确的,原来是翻译的错误... ...):

 

文档中 写道
我们推荐在一个包装器(wrapper)类HibernateUtil 的静态初始化代码块中启动Hibernate。或许你在Hibernate文档的其他很多地方看到过这个类, 但是要在你的项目中使用注解,还需要对这个辅助(helper)类进行扩展。扩展如下:
  static {
        try {
            /*  就是这句了,出问题  */	
            sessionFactory = new AnnotationConfiguration().buildSessionFactory();
        } catch (Throwable ex) {
            // Log exception!
            throw new ExceptionInInitializerError(ex);
        }
    }
 

 

只有改成sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();我这里才成功了。

 

另外遇到:

Log4j 错误: java.lang.NoSuchFieldError: TRACE 

 原因是Log4j的版本不兼容导致,换成hibernate-annotations-3.4.0.GA发布包中的log4j就好了。

 

org.hibernate.MappingException: Unknown entity

 原因是import org.hibernate.annotations.Entity;这个根据Eclipse自动导入的类是不对的,改成import javax.persistence.Entity;(位于ejb3-persistence.jar中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值