糾正我,如果我錯了!
通常情況下,如果hbm2ddl.auto設置爲「UPDATE」,hibernate會檢查表是否存在於數據庫中,如果不存在,它會創建該表並推送數據,如果表存在,則只是將數據添加到該表中。
for hbm2ddl.auto = update,我觀察到的是,在每次插入之前,hibernate都試圖創建表。儘管表存在,它會在日誌中拋出異常,然後hibernate會知道表的存在。
這是一個正常的行爲?或者我錯過了什麼?hbm2ddl.auto設置爲「更新」,但它試圖在每次插入前創建表格
看看下面的日誌與控制檯的log4j的幫助下產生的,請..
Hibernate: create table UsersCC (userID int4 not null, userDOB date, userEmail varchar(255), userPswd varchar(255), primary key (userID))
23:02:27,799 WARN ExceptionHandlerLoggedImpl:27 - GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
at com.hibernate.Setup.SetupTest.main(SetupTest.java:19)
Caused by: org.postgresql.util.PSQLException: ERROR: relation "userscc" already exists
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2310)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2023)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:217)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:421)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:318)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:310)
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
... 13 more
Hibernate: insert into UsersCC (userDOB, userEmail, userPswd, userID) values (?, ?, ?, ?)
23:02:27,998 TRACE BasicBinder:65 - binding parameter [1] as [DATE] - [Sun Jan 01 23:02:25 IST 2017]
23:02:27,999 TRACE BasicBinder:65 - binding parameter [2] as [VARCHAR] - [[email protected]]
23:02:28,000 TRACE BasicBinder:65 - binding parameter [3] as [VARCHAR] - [lenovo18]
23:02:28,004 TRACE BasicBinder:65 - binding parameter [4] as [INTEGER] - [101]
23:02:28,013 INFO pooling:230 - HHH10001008: Cleaning up connection pool [jdbc:postgresql://localhost:5432/campusCafeDb]
如果正常的話,是不是一個性能問題?
謝謝..我讓hbm2ddl.auto沉默。 :d。無論如何,你能否在你評論中提到的VALIDATE中闡述一些內容? – lovelyim92