2011-08-25 93 views
0

我們使用EclipseLink進行持久化,並配置了EclipseLink以通過將屬性eclipselink.ddl-generation設置爲drop-and-create-tables來自動創建數據庫表等。如果執行DDL語句時發生錯誤,使EcliseLink失敗

這工作正常,但是EclipseLink(以及我們的應用程序)會在單元測試期間以及實際的Web應用程序啓動時愉快地繼續,即使某些DDL語句失敗。

我注意到這一點,當我使用不當的@Index註釋,並想知道爲什麼不創建索引,直到我在日誌中發現:

org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: org.h2.jdbc.JdbcSQLException: 
Column "MY_INDEX_FLD" not found; SQL statement: 
CREATE INDEX X_INDEX ON X (MY_INDEX_FLD) 

我真的很想知道,如果發生這種情況。如果某些DDL語句失敗,是否有某種方法可以告訴EclipseLink使其成爲致命錯誤?

我想至少讓我們的(JUnit)集成測試在這種情況下失敗。

如果錯誤僅僅是表已經存在(在針對現有數據庫進行測試的情況下),某些方式可以忽略的獎勵點。

回答

0

顯然,EclipseLink無法做到這一點。

我看了一眼在EclipseLink的方法是創建表:

org.eclipse.persistence.tools.schemaframework.TableCreator.createTables()

(搜索頁上的 「createTables」)。

我包含行:

 try { 
      schemaManager.createObject(table); 
      session.getSessionLog().log(SessionLog.FINEST, 
       "default_tables_created", table.getFullName()); 
     } catch (DatabaseException ex) { 
      session.getSessionLog().log(SessionLog.FINEST, 
      "default_tables_already_existed", table.getFullName()); 
       if (!shouldIgnoreDatabaseException()) { 
        throw ex; 
       } 
     } 

因此很明顯的EclipseLink假設表(和索引)在創建過程中的錯誤總是由表中已經存在的:-(造成

我提交了錯誤的EclipseLink爲此:Bug 356068