如果映射对象被更改,有没有办法从数据库中检索数据?

时间:2017-10-18 14:56:38

标签: java sql hibernate oop

我正在使用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();

是否可以仅使用旧参数检索对象,或者只是跳过不匹配的参数(并将它们放在地图中)?

1 个答案:

答案 0 :(得分: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);
}    

(可能需要进行某种类型转换)