`
u011936142
  • 浏览: 42694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在Hibernate 4.3中如果使用了@Table注解,在获取session的时候会抛出如下异常解决办法

阅读更多
使用hibernate4.3.2+javaEE6.0运行时会报如下错误

Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;  
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936)  
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781)  
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762)  
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716)  
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)  
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)  
    at util.HiberUtils.<clinit>(HiberUtils.java:16)  
异常的意思是:在javax.persistence.Table这个类中没有找到indexes()方法

研究半天发现是用注解方式生成表的时候 @Table(name = "user", catalog = "forum")就会抛出异常,

我用的是java EE 6.0, 查找javaEE 6.0的api发现没有indexes()这个方法,

然后查阅java EE 7.0的api发现 有indexes()这个方法,

java EE 7.0 API:http://docs.oracle.com/javaee/7/api/

所以要想使用Hibernate 4.3中的@Table注解就需要用java EE 7.0

但是后来经过测试发现将@Table(name = "user", catalog = "forum")改成@Entity(name = "user")错误也就不见了。

还有一个奇怪的问题,如果不用main方法和Junit测试获取session,直接在jsp页面进行CRUD操作就不会抛出异常


解决办法:

方法一:

如果你是WEB开发,则可以忽略这个异常。直接在jsp页面操作

方法二:

将@Table(name = "user", catalog = "forum")改成@Entity(name = "user")

方法三:

将java EE 6.0 换成java EE 7.0


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics