其实本来没啥大问题,但到网上查的时候发现了一些误人子弟的说法,所以还是记下来吧。

现象:

hibernate从低版本升级到某一个版本时(我们是升到4.3.10)时,在程序启动时会报错:
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
 
于是查资料,网上也有许多人遇到同样的错误,并且发现的原因是在model中使用了@Table(name="xxx")这个注解所致,于是推荐的改法是将这个标签去掉,改用@Entity(name="xxx")这个注解,甚至有人说是新版的hibernate不支持@Table这个注解了。
 
其实不然。
 
在Hibernate的新新官方文档中,明确提到了@Table这个注解:
@Table lets you define the table the entity will be persisted into. If undefined, the table name is the unqualified class name of the entity.
 
当然你可以不写这个注解,那么表名默认就是非限定类名(也就是不带包的类名)。但企图使用@Entity(name="xxx")来代替,把这里的xxx作为表名来看却是大错特错了,@Entity中的nama属性表示的是重新定义实体名:
@Entity.name lets you define the shortcut name of the entity you can use in JP-QL and HQL queries. It defaults to the unqualified class name of the class.
 
这里的默认也是非限定类名。这个实体名就是你在Hql中使用的(比如“from xxx")那个model名称,一般这个名称不要重新定义,直接用类名就OK,更不要把它当做表名,除非你的表名和实体名一模一样。
 
回到那个异常,这个问题如何解决呢?可以肯定的是,这个问题是由jar包冲突引起的,hibernate的注解基础部分现在都采用JPA的注解了,JPA是属于javaEE的一部分,许多javaEE的包中也包括了JPA 的相关API,这个问题可能就是由于项目中存在javaEE相关的jar包,与hibernate所包含的JPA相关的jar包版本有冲突。
 
解决办法一:删除冲突的jar包
首先排查下项目Lib库,发现类似的jar包要检查下,比如有人发现这些包ejb3-persistence.jar,javaee.jar,可以解开看一下,如果里面有javax.persistence这个包名,估计就找到问题jar包了。处理方法要么把这些包删除,如果一定需要,那也要升级个别的版本试试,或者把jar包里的java.persistence下样关的内容删除,再重新打包。
 
 
解决办法二:针对resin服务器中的jar包冲突
但我们项目遇到了更怪僻的问题,lib库中没有相关的javaee包,无法用上面所说的方法。找来找去,终于发现,我们用的resin服务器,resin自带的系统库里有一个javaee-16.jar的包。但不论是删除这个Jar包还是重新编译,resin均报错。又google出去,终于找到解决方法:
在resin.xml文件最后加上一句:
 
<class-loader>
<servlet-hack/>
</class-loader>

  

 
 
好使!问题终于解决!

hibernate某些版本(4.3)下报错 NoSuchMethodError: javax.persistence.Table.indexes()的更多相关文章

  1. resin下发布项目报错java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index

    我的resin版本为4.0.56; 项目在tomcat下启动正常,打包在resin下发布时报错:java.lang.NoSuchMethodError: javax.persistence.Table ...

  2. 使用EL表达式正确情况下报错:javax.servlet.jsp cannot be resolved to a type

    这个错误可能是服务器自带的servlet库未导入的原因.右键项目属性,转到Targeted Runtimes,选择一个服务器,例如Tomcat,单击应用,可能就可以解决.

  3. pymysql下报错:numpy.float64 object has no attribute 'translate' 可能是pandas版本的问题

    pymysql下报错:numpy.float64 object has no attribute 'translate'.定位到db.merge函数中,dataframe中浮点型元素的类型为numpy ...

  4. 关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)

    Hibernate4版本的SessionFactory实例构建的步骤是这样的(也是很多学习资料的通用范本): //Configuration就是代表着hibernate的那个xml配置文件对象,如果c ...

  5. jquery.validate.js在IE8下报错不运行

    因为项目要表单验证,所以特意去找了jquery.validate这个应该是jquery官方团队出品的表单验证插件. 实际应用时,却在IE8调试时碰到了问题. 从jquery.validate官网下载了 ...

  6. WebUploader IE9下报错

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在项目中,推荐并一直在使用WebUploader进行文件上传业务开发. ...

  7. macos版本mojave 安装postgres报错

    mac os 版本mojave 安装postgres报错 事由:前几天升级mac到mojave版本也就是10.14系统,发现对于很多原系统的软件包都不兼容,安装时出现报错. 报错: pthread.h ...

  8. JavaScript在IE6,IE7下报错'expected identifier, string or number'

    问题: 代码在Forefox和IE8下工作正常,但是在IE6下报错: expected identifier, string or number 假如变量options有多个选项,那么我们可以用逗号分 ...

  9. Linux 下报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must解决方案

    一.报错环境:在Linux mint下,前几天还用得很好的的eclipse,今天开机不知为什么这样. Linux 下报错:A Java RunTime Environment (JRE) or Jav ...

随机推荐

  1. Android-JNI编程-图文解析

    要想阅读并调试下文源码,首先要确保你的NDK环境是ok的:        编译环境:win7+Eclipse+ADT+SDK+NDK:基本用最新的就ok.        说明下,下文代码就是一个简单的 ...

  2. hdu 2612 Find a way(BFS)

    题目链接:hdu2612 思路:题意是求两个人到某一个KFC花费时间和最小,其实就是求最短距离和,用两个BFS,分别以两个人为起点,分别记录下两人到每个KFC的距离,然后求出最小的和 #include ...

  3. Firebase远程更新应用

    能打造出色的应用不意味着一定能在商业上取得成功,两者之间还有许多工作要做,绝不能简单发布应用后就宣告“收工”.您需要能迅速根据用户反馈作出调整.测试新功能,以及向用户提供他们最关注的内容. Fireb ...

  4. 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能

    作为一枚程序员,不会点高逼格的doc命令,那么都有点感觉对不起自己的行业了,好了废话就到这里了   第一种方式: 首先使用cmd命令:window键+R 然后输入cmd回车 第一种方式: 第一步: 设 ...

  5. nginx+tomcat的集群和session复制

    前端服务器采用nginx,后端应用服务器采用tomcat.nginx负责负载均衡,session复制在tomcat上处理. 1.nginx安装(略) 2.nginx配置负载均衡 http { incl ...

  6. x^2+y^2=N的整数解?

    本文系转载:http://blog.sina.com.cn/s/blog_a661ecd50101cv41.html 我们先研究这个问题的一部分:哪些素数是两平方数之和?为什么我们先研究素数,有个很重 ...

  7. git push和git pull

    git push git push如果直接使用,不加repository和refspec,那么首先根据当前branch的branch name,在配置文件中找到branch.branchName.re ...

  8. YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间

    到这里,大概的YII开发已经基本可以,但是下面要将的所有课程,学完之后可以让你更爱YII.下面的教程是讲的MVC的M,model.数据,业务,代码的集中地区.所以开始之前,学学开发规范-路径别名-命名 ...

  9. Js中单引号和双引号的区别

    <html> <body> <input value="外双引号内双引号-错误" type="button" onclick=&q ...

  10. mac 更改word的默认显示比例为125

    1.打开或新建一个word文档 2.按 fn + option + F11 键,会弹出一个[项目]窗口,选中Normal, 双击[模块], 修改为125 Sub AutoOpen() ActiveWi ...