2017-10-18 42 views
0

我正在使用hibernate 5.2。我不使用hbm2ddl。目前試圖在對結構進行更改時自動更新數據庫。如果映射對象被更改,有沒有辦法從數據庫中檢索數據?

想法是從舊數據庫中獲取所有數據並將其粘貼到新數據庫中。但我遇到了問題,我無法從更改的表中檢索數據。我得到錯誤:

org.hibernate.exception.GenericJDBCException: could not prepare statement 

舊錶爲:

Fruits{ 
    int apples; 
    int oranges; 
} 

新表:

Fruits{ 
    int apples; 
    int oranges; 
    int pears; 
} 

新柱防止被檢索的數據。

我試圖用TypedQuery

TypedQuery<Fruits> query = session.createQuery("FROM Fruits", Fruits.class); 
ArrayList<Fruits> fruits = (ArrayList<Fruits>) query.getResultList(); 

是否有可能檢索對象只與舊參數,或者直接跳過不匹配的參數(並把它們放在地圖)?

回答

0

我不知道,但您可以選擇只選擇數據庫中的現有列,並將它們轉換爲空梨子對象字段。

SELECT apples, oranges FROM fruits

這會給你:

List<Object[]> fromDB = (ArrayList<Object[]>) query.getResultList(); 
List<Fruits> fruits = new ArrayList(); 
for (Object[] o : fromDB) { 
    Fruits f = new Fruits(fromDB[0], fromDB[1], 0); 
    fruits.add(f); 
}  

(也許有些類型轉換是必要的)

+0

您是否使用'createNativeQuery'或'TypedQuery'這個? – Alyona

+0

有沒有一種方法可以檢索成對的列名+數據?所以我知道數據來自哪一列。所以如果梨位於蘋果和橘子之間,我不會把橘子的信息放入梨中。 – Alyona

+0

我不這麼認爲,但他們會按照數據庫表的順序來。所以你會知道的。 –

相關問題