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

现象:

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. 2014 (多校)1011 ZCC Loves Codefires

    自从做了多校,整个人都不好了,老是被高中生就算了,题老是都不懂=-=原谅我是个菜鸟,原谅我智力不行.唯一的水题. Problem Description Though ZCC has many Fan ...

  2. 初步swift语言学习笔记9(OC与Swift杂)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/34440159 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  3. asp.net 通过js调用webService注意

    通过JavaSrcipt调用WebService格式: //通过SricptManager 的,services标签添加web服务引用 <asp:ScriptManager runat=&quo ...

  4. java——拷贝文件夹方法

    public void copyFolder(String oldPath, String newPath) { try { (new File(newPath)).mkdirs(); //如果文件夹 ...

  5. javaScript表单焦点自动切换

    ---恢复内容开始--- <html> <head> <script> window.onload=function(){ var form=document.ge ...

  6. [原创]Windows下更改特定后缀名以及特定URL前缀的默认打开方式

    Windows下,特定后缀名的文件会由特定的应用程序来运行,比如双击readme.txt,通常情况下会由Windows自带的notepad.exe(记事本)打开文件.如果现在安装了记事本以外的其他文本 ...

  7. jira汉化

    https://translations.atlassian.com/dashboard/dashboard 下载汉化jar文件,在jira中上传插件,系统设置中文即可 LOFTER:我们的故事    ...

  8. The FastCGI process exited unexpectedly

    ERROR:HTTP Error 500.0 - Internal Server Error D:\Program Files\php\php-cgi.exe - The FastCGI proces ...

  9. [转]fatal error: iostream.h: No such file or directory

    iostream.h是非标准头文件,iostream是标准头文件形式.iostream.h时代没有名词空间,即所有库函数包括头文件iostream.h都声明在全局域.为了体现结构层次,c++标准委员会 ...

  10. laravel 心得

    1.安装 使用composer安装laravel ,切换到你想要放置该网站的目录下,运行命令: composer create-project laravel/larevel project 4.1 ...