欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate4 问题篇(二)javax.persistence.Table.indexes()不存在

程序员文章站 2022-07-12 16:14:36
...

    在使用Hibernate注解做映射时,遇到了一个问题:

     java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

    按照以往的经验通常有几个方向来思考这个问题,其一是少引入了jar包,其二jar包引入了,但是可能版本比较低,还有一种是jar包多引入了,引起了jar包的冲突,低版本和合适版本的都引入了,编译器不知道该使用哪个jar包,这样也会造成上面的原因。

    很快排除了上面的第一个原因,通过查询发现Hibernate4.3.11有一个比较重要的特性对JPA2.1的支持,通过查询得知J2EE 7.0才开始支持JPA2.1,开发工具采用的是MyEclipse10.0.7,这个版本并不支持J2EE7.0,最初想到一种解决问题思路,如何引入J2EE 7.0 Libraries,顺着这个问题,但是没有成功,后来选择直接在构建路径中移除了J2EE5.0Libraries,结果采用main方法进行测试创建SessionFactory对象成功了,而且在Java实体类上的注解也没有报错,所以猜测是因为引入的低版本的jar包,而且这个jar包就存在J2EE5.0Libraries中与hibernate框架中的jar包引起了冲突。

     最终的解决方案移除 J2EE5.0 Libraries,或者为工具引入 支持JPA2.1的 J2EE 7.0 Libraries,可能是因为MyEclipse工具优先使用Myeclipse中jar包,而且Hibernate框架中有JPA2.1的jar包hibernate-jpa-2.1-api-1.0.0.Final.jar

      猜想: 框架中hibernate-jpa-2.1-api-1.0.0.Final.jar已经包含javax.persistence包中注解了。 J2EE5.0 Libraries的javax.persistence是按照jpa2.0标准定义的注解 ,这两个jar包产生了冲突,这是我个人的理解也许不完全正确但是通过移除冲突jar包的解决这个问题来看至少可以佐证我的想法。

相关标签: hibernate4 jpa2.1