2016-09-26 10 views
0
私は1.4.9を使用していたactivejdbc

と、次のサンプルコードはうまくもうactivejdbcに)モデルのgetId(DB取得できません1.4.12

Client client = new Client(); 
client.save(); 
Assert.assertNotNull(client.getId()); 

私が1.4.12にアップグレードしているので、クライアントを実行していました.getId()は、saveが新しいレコードを挿入するときに常にnullを返します。つまり、IDがリフレッシュされていません。

誰もこれに気づいたでしょうか?新しく作成したIDを取得するには、このバージョンを使用して別の操作を行う必要がありますか?

答えて

0

バージョン1.4.12ではこれを確認できません。たとえば、私はこの例を書いた:https://github.com/javalite/simple-example/blob/new_idMain.javaのコードを確認してください。ご覧のとおり、コードはあなたと同じですが、21行目では新しいIDの実際の値が表示されます。

あなたの問題を再現する簡単な例をまとめることができれば、私は見ていきます。

EDIT:

今、あなたは下のコメントで詳細情報を提供したことを、問題は、あなたが空の文字列にIDを設定することです:「」。 IDはnullではないため、save()メソッドはinsertではなくupdateを使用します。更新はIDの値を使用して「既存の」レコードを更新し、結果として何もしません。 ID値を乱すことは可能ですが、アドバイスされません。詳細はこちらを参照してください。http://javalite.io/surrogate_primary_keys

+0

例を準備しているうちに、問題の原因が分かっていると思います。私のコードは、モデルを保存する前に属性を設定します。 public setClient(String id、String name) { クライアントクライアント=新しいクライアント(); \t client.setId(id); \t client.setName(name); client.save(); \t \t \tこれが新しいクライアントの場合、idパラメータはnullではなく空( "")になります。明らかに、以前のバージョンでは、activejdbcはnullまたは新しいレコードを挿入することを意味することを理解していました。そして、それはidがnullのときだけ挿入します。これは可能でしょうか? – ccarvalho

+0

同じ論理はまだ真です。どうぞ、更新または挿入を決定する方法を見てください:https://github.com/javalite/activejdbc/blob/365a98e8feb704f65c78f5a7416a02a9592b9a02/activejdbc/src/main/java/org/javalite/activejdbc/Model.java#L2583- L2583 – ipolevoy

関連する問題