log4j:ERROR Failed to excute sql
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@90.0.12.20:1521:ORCL
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.log4j.jdbc.JDBCAppender.getConnection(JDBCAppender.java:212)
at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:175)
at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)
at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders (AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:157)
at net.sf.ehcache.config.Configurator.configure(Configurator.java:126)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:166)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:138)
at net.sf.ehcache.CacheManager.create(CacheManager.java:193)
at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:130)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:173)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
at com.cn.hibernate.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
at com.cn.test.TestHibernate.main(TestHibernate.java:35)log4j的部分配置:
log4j.appender.DATABASE.sql
INSERT INTO T_LOG4J(stamp,thread,infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@90.0.12.20:1521:ORCL
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.log4j.jdbc.JDBCAppender.getConnection(JDBCAppender.java:212)
at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:175)
at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)
at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders (AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:157)
at net.sf.ehcache.config.Configurator.configure(Configurator.java:126)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:166)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:138)
at net.sf.ehcache.CacheManager.create(CacheManager.java:193)
at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:130)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:173)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
at com.cn.hibernate.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
at com.cn.test.TestHibernate.main(TestHibernate.java:35)log4j的部分配置:
log4j.appender.DATABASE.sql
INSERT INTO T_LOG4J(stamp,thread,infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
没找到驱动。
把jdbc的jar文件添加到classpath中,如果是web项目,将其放到WEB-INF/lib目录下#呵呵,第一次看到用log4j把log存数据里的。
可是我用的是MySQL数据库呀?
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:613)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:587)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:591)
at com.cn.test.TestHibernate.main(TestHibernate.java:37)这是什么原因?
光从报错看,是你的这个User实体的对象已经存在,而不是全新生成的,所以不该用persist方法,而应该用saveOrUpdate方法。hibernate发现要被persist的这个对象的id已经存在于EntityManager中。
刚刚说的log4j报的错误已经跟你说了,没有驱动,这个问题是另外的问题了,如果你这样没完没了的问,没法伺候
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)放了log4j.properties之后是这样的[framework] 2012-08-22 14:59:54,365 - org.hibernate.connection.DriverManagerConnectionProvider -330 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
[framework] 2012-08-22 14:59:54,365 - org.hibernate.connection.DriverManagerConnectionProvider -330 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
[framework] 2012-08-22 14:59:54,368 - org.hibernate.connection.DriverManagerConnectionProvider -333 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/yonghu?characterEncoding=gb2312
[framework] 2012-08-22 14:59:54,368 - org.hibernate.connection.DriverManagerConnectionProvider -333 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=root, password=685}
[framework] 2012-08-22 14:59:54,565 - org.hibernate.cfg.SettingsFactory -530 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: MySQL, version: 5.5.20
[framework] 2012-08-22 14:59:54,565 - org.hibernate.cfg.SettingsFactory -530 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.8 ( Revision: ${svn.Revision} )
[framework] 2012-08-22 14:59:54,578 - org.hibernate.dialect.Dialect -543 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.MySQLDialect
[framework] 2012-08-22 14:59:54,583 - org.hibernate.transaction.TransactionFactoryFactory -548 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
[framework] 2012-08-22 14:59:54,583 - org.hibernate.transaction.TransactionManagerLookupFactory -548 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
[framework] 2012-08-22 14:59:54,585 - org.hibernate.cfg.SettingsFactory -550 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Maximum outer join fetch depth: 2
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
[framework] 2012-08-22 14:59:54,588 - org.hibernate.cfg.SettingsFactory -553 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
[framework] 2012-08-22 14:59:54,590 - org.hibernate.hql.ast.ASTQueryTranslatorFactory -555 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
[framework] 2012-08-22 14:59:54,590 - org.hibernate.cfg.SettingsFactory -555 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
[framework] 2012-08-22 14:59:54,590 - org.hibernate.cfg.SettingsFactory -555 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
[framework] 2012-08-22 14:59:54,590 - org.hibernate.cfg.SettingsFactory -555 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
[framework] 2012-08-22 14:59:54,590 - org.hibernate.cfg.SettingsFactory -555 [main] INFO org.hibernate.cfg.SettingsFactory - Cache provider: org.hibernate.cache.EhCacheProvider
[framework] 2012-08-22 14:59:54,593 - org.hibernate.cfg.SettingsFactory -558 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
[framework] 2012-08-22 14:59:54,593 - org.hibernate.cfg.SettingsFactory -558 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
[framework] 2012-08-22 14:59:54,598 - org.hibernate.cfg.SettingsFactory -563 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
[framework] 2012-08-22 14:59:54,598 - org.hibernate.cfg.SettingsFactory -563 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
[framework] 2012-08-22 14:59:54,598 - org.hibernate.cfg.SettingsFactory -563 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
[framework] 2012-08-22 14:59:54,598 - org.hibernate.cfg.SettingsFactory -563 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
[framework] 2012-08-22 14:59:54,623 - org.hibernate.impl.SessionFactoryImpl -588 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
[framework] 2012-08-22 14:59:54,628 - net.sf.ehcache.config.Configurator -593 [main] WARN net.sf.ehcache.config.Configurator - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/java/%e7%94%a8%e6%88%b7/MyEclipse%208.5/shujuku_di8zhang/WebRoot/WEB-INF/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
log4j:ERROR Failed to excute sql
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:404)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.log4j.jdbc.JDBCAppender.getConnection(JDBCAppender.java:212)
at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:175)
at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)
at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
[framework] 2012-08-22 15:00:15,907 - org.hibernate.tool.hbm2ddl.SchemaUpdate -21872 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema
[framework] 2012-08-22 15:00:15,933 - org.hibernate.tool.hbm2ddl.TableMetadata -21898 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - table found: yonghu.users
[framework] 2012-08-22 15:00:15,933 - org.hibernate.tool.hbm2ddl.TableMetadata -21898 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - columns: [id, address, tel, age, name]
[framework] 2012-08-22 15:00:15,933 - org.hibernate.tool.hbm2ddl.TableMetadata -21898 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - foreign keys: []
[framework] 2012-08-22 15:00:15,933 - org.hibernate.tool.hbm2ddl.TableMetadata -21898 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - indexes: [primary]
[framework] 2012-08-22 15:00:15,933 - org.hibernate.tool.hbm2ddl.SchemaUpdate -21898 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:613)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:587)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:591)
at com.cn.test.TestHibernate.main(TestHibernate.java:37)
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
我装了log4j.properties时,报错是这样的[framework] 2012-08-22 15:10:22,934 - org.hibernate.cfg.SettingsFactory -580 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
[framework] 2012-08-22 15:10:22,957 - org.hibernate.impl.SessionFactoryImpl -603 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factorylog4j:ERROR Failed to excute sql
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:613)
我都加mysql驱动了。我觉得是不是log4j.properties是关于oracle数据库的?
有道理!怎么改?# level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,A1
log4j.addivity.org.apache=true# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# 本处设置为"INFO"以上级别在控制台输出(默认情况使用rootLogger中的设置)
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=Nation
log4j.appender.DATABASE.password=1
# 本处设置为"WARN"以上级别在数据库存储(默认情况使用rootLogger中的设置)
log4j.appender.DATABASE.Threshold=WARN
log4j.appender.DATABASE.sql=INSERT INTO T_LOG4J(stamp,thread,infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
# 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 每天新建日志
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/website.log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,A1
log4j.addivity.org.apache=true# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# 本处设置为"INFO"以上级别在控制台输出(默认情况使用rootLogger中的设置)
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 用于数据库
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
#log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
#log4j.appender.DATABASE.user=Nation
#log4j.appender.DATABASE.password=1
# 本处设置为"WARN"以上级别在数据库存储(默认情况使用rootLogger中的设置)
log4j.appender.DATABASE.Threshold=WARN
log4j.appender.DATABASE.sql=INSERT INTO T_LOG4J(stamp,thread,infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
# 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 每天新建日志
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/website.log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,A1
中的DATABASE去掉就可以了
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,A1
中的DATABASE去掉就可以了
变成
log4j.rootLogger=DEBUG,CONSOLE,A1
[framework] 2012-08-22 19:50:30,984 - org.hibernate.tool.hbm2ddl.SchemaUpdate -796 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:613)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:587)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:591)
at com.cn.test.TestHibernate.main(TestHibernate.java:37)