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

现象:

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系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  2. C#中的一种按日期分文件夹的日志写法

    众所周知,日志是调试程序的有效途径,有一个好的日志代码,是一个程序小猿梦寐以求的. 以下是我结合网上资源自己总结的一小段代码,请笑纳: 转载请注明来源: http://www.cnblogs.com/ ...

  3. Visual Studio - 提升幸福感的N个快捷键

    现代化IDE给程序猿提供了极大的方便,掌握一些优秀的开发工具,使我们写代码时有行云流水般的快感. VS作为宇宙最强没有之一的IDE,用起来也是好幸福.下面是我最常用的快捷键,已经印在手指上,每次好像不 ...

  4. Android Activity和intent

  5. C#.NET 各种连接字符串

    C#.NET 各种连接字符串 近期连接数据库时,经常忘记连接字符串是如何的格式,现在此备注 此文章引用http://www.cnblogs.com/zhiqiang-imagine/archive/2 ...

  6. iOS-OC-基础-NSDictionary常用方法

    /*=============================NSDictionary(不可变字典)的使用=========================*/ //————————————————— ...

  7. web前端中实现多标签页切换的效果

    在这里,实现多标签页效果的方法有两个,一个是基于DOM的,另一个是基于jquery的,此次我写的是一个对于一个电话套餐的不同,显示不同的标签页 方法一: 首先,我们要把页面的大体框架和样式写出来,ht ...

  8. JavaScript开发规范

    作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以 及执行效率上的问题.本人在开发工作中就曾与不按规范来开发 ...

  9. 移动web前端的一些硬技能(二)动手前必须掌握的基本常识

    记得刚开始接触移动端web的时候,书和网上的资料都不多,查起来很费劲,现在比以前要好很多了,可是还是会有一些刚接触移动端的朋友会问我一些我最初会遇到的问题,或许是书本写的并不那么重,也或许是这些知识写 ...

  10. 关于bootstrap列偏移的两种方式

    第一种方式: <div class="col-md-2 col-md-offset-9"> <input type="text" class= ...