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

在使用Hibernate4.3.11时遇到`javax.persistence.Table.indexes()`不存在的问题,经分析可能是由于MyEclipse10.0.7不支持J2EE 7.0导致的JPA2.1兼容性问题。解决方案是移除J2EE5.0 Libraries或引入支持JPA2.1的J2EE 7.0 Libraries,以消除jar包冲突。
摘要由CSDN通过智能技术生成

    在使用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包的解决这个问题来看至少可以佐证我的想法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值