Spring4+Hibernate4整合问题解决


问题一:org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thre


分析及解决:


错误信息:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)

错误原因:

所需要开事务的地方都@Transactional注解了,排除结果是spring管理hibernate4 transaction getCurrentSession出现的问题,hibernate4不支持你用hibernate3的 getcurrentSession换用openSession就没问题了。



问题二:java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor


错误消息:

严重: Servlet /nssh threw load() exception
java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
	at org.springframework.orm.hibernate3.SessionFactoryUtils.getDataSource(SessionFactoryUtils.java:129)
	at com.ywx.tiles.dic.dao.DicConfigDao.findDicDataList(DicConfigDao.java:37)
	at com.ywx.tiles.dic.service.DicConfigManager.findDicDataList(DicConfigManager.java:190)
	at com.ywx.tiles.dic.service.DicConfigManager.loadDic(DicConfigManager.java:113)
	at com.ywx.tiles.dic.service.DicConfigManager.loadAllDic(DicConfigManager.java:90)
	at com.ywx.tiles.common.servlet.ConfigServlet.init(ConfigServlet.java:27)
	at javax.servlet.GenericServlet.init(GenericServlet.java:212)


分析及解决:

错误原因:在用SessionFactoryUtils.getDataSource( )方法的时候,导报要注意看了,因为我这里是Spring4+Hibernate4,由于导了Hibernate3的SessionFactoryUtils(Hibernate3中是没有SessionFactoryImplementor这个实现的),所以换成Hibernate4的就没问题,因为我程序中我用的都是Hibernate4的操作方法操作数据库。


问题三:log日志在控制台不显示问题(先不考虑在本地文件输出log)


配置log4j日志步骤:

1、导入一下jar文件(slf4j的版本要对应):

log4j.jar
slf4j-api-1.5.0.jar
sle4j-log4j12-1.5.0.jar


2、配置log4j.properties文件:

配置的基本格式为:

#配置根Logger  
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …  
  
#配置日志信息输出目的地Appender  
log4j.appender.appenderName = fully.qualified.name.of.appender.class   
  log4j.appender.appenderName.option1 = value1   
  …   
  log4j.appender.appenderName.optionN = valueN   
  
#配置日志信息的格式(布局)  
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class   
  log4j.appender.appenderName.layout.option1 = value1   
  …   
  log4j.appender.appenderName.layout.optionN = valueN  


等级(level)为5种:
FATAL     0   
ERROR     3   
WARN      4   
INFO      6   
DEBUG     7  

Appender 为日志输出目的地,Log4j提供的appender有以下几种:


org.apache.log4j.ConsoleAppender(控制台),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Layout:日志输出格式,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

配置文件log4j.properties:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
log4j.logger.com.ywx=info





  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值