在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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章