2017-10-18 2 views
0

私は、休止状態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

私は分かりませんが、DBの既存の列を選択して空の梨のあるオブジェクトに変換することができます。

あなたを与えるだろう

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

私はそうは思わないが、データベーステーブルの順番で来るだろう。だからあなたは知っているだろう。 –

関連する問題