使用hibernate时大部分时间里都是正常,偶尔会报错,一直不知道是啥原因,异常信息如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用hibernate时大部分时间里都是正常,偶尔会报错,一直不知道是啥原因,异常信息如下相关的知识,希望对你有一定的参考价值。

java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:112)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:471)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:427)
at ch.qos.logback.classic.Logger.warn(Logger.java:740)
at org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:233)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:65)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)

第三方关联表
如students 和 teachers
student端:
<set name="teacherid" table="table_t_s" >
<key column="stu_id"/>
<many-to-many class="po.Teacher" column="tea_id"/>
</set>
teacher端:
<set name="studentid" table="table_t_s" >
<key column="tea_id"/>
参考技术A 你的代码有可能没编译好,eclipse有时候会有这种怪现象,你在classes目录下看是不是这个class编译好了。。追问

不可能是没有编译好,出现这个异常,只是偶尔的情况,其他的时候一直是正常运行的

追答

那就是你这个方法的问题了,可能是你调用的方法,没有定义或者是名字错误了,然后去检查你的spring配置文件,如果还不行的话,试试把spring配置文件属性名和beanName改为不一样的,如果还不行,那就无能为力了...

参考技术B 谢谢

Hibernate查询结果与实际结果不符

将对应的hql语句拿到plsql中进行查询时,会显示有10多条记录,但是系统执行的结果却只有4条。
但是这种情况并不是一直存在的,在系统运行的大部分时间里,数据都能够正常查询出来,只是偶尔才会出现这种特殊情况,完全不知道是因为什么原因。虽然出现频率不高,但是都很致命,问题原因还很难查找。不知道各位日常开发中有没有遇到过,有的话还希望能分享一下,或者提供一些如何查找问题的建议也好,多谢。
多谢各位的回复!
我也觉得应该是缓存问题,但是不知道问题该从何查起。
执行hql的类我都是继承自HibernateDaoSupport,都是再简单不过的hql语句:
return this.getHibernateTemplate().find("from Product where company.id = ? and removed = ? ", new Object[]company.getId(), false);
,session都是交由spring进行管理的。
我看其他很多网友也说Hibernate3存在脏读数据的问题,但是跟我这个问题还是有些差异。
我这个问题最奇怪的地方就在于它不是查询上一次的结果,而是固定的只查出来4条,不局限哪张表,目前已发现有好几张表都出现过。
我想本地调试也不行,因为它根本就不重现,只有在生产环境运行一段时间之后才会偶尔出现。

没有其它的地方,缓存了 hibernate 对象么?既然没 hibernate 缓存,那可能有其它的缓存,比如连接或其它的东西装进了 map 的。

开发时哪些东西叫“有状态”,哪些叫“无状态”,要分清。无状态是表示,每个请求之间没有依赖关系的,不存在先后,有状态的话,就可能存在依赖关系。你这个方法逻辑上应该是个无状态的,所以它使用的 hibernate 连接和其它相关的东西都应该是与上一个请求没有任何关系。你得找出来哪些地方用了 static 保存着东西。一般在 j2ee 环境中,static 不能用于共享,只能用在只读式的场合,比如,服务器启动后读取配置信息,而且这些配置信息是不会变的。任何可能变化的内容都不应该用 static 共享,因为它会限制你的程序仅运行在一台服务器上,你开个服务器集群的话就可能会有错误。
参考技术A 请确定你的的操作是在二级缓存 关闭下进行的... 我怀疑你存在缓存问题 哥.....和spring没一毛钱关系 你看下你的每一个entity配置的 hbm文件啊.. 先把hbm设置成 <cache usage="read-only">
进行测试...spring再怎么管理 每一个实体类的cache总是你自己设置的啊追问

我其实是没有用二级缓存的,这个不用配置。在没用二级缓存的情况下配置了会出错

追答

那这个我也不知道了....

参考技术B 看你的hibernate中如何查询的。

以上是关于使用hibernate时大部分时间里都是正常,偶尔会报错,一直不知道是啥原因,异常信息如下的主要内容,如果未能解决你的问题,请参考以下文章

学点 Kafka 流处理

结对编程——带UI的小初高数学学习软件

linux偶尔无法连接任何端口。

virtuoso文件被锁打不开解决方法

滑动删除 UITableViewCell 时,偶尔会出现红色减号删除图标

使用hibernate.get()取得对象再set()属性后调用update()更新对象时一直不能写入到数据库,是啥原因?