AndroidのSQLiteデータベースでデータを作成して取得しようとしています。queryForAllはORMLiteでヌルIDを返します
メソッドを作成してデータを追加すると、オブジェクトが正しく更新されます(ロングIDが設定されます)。しかし、queryAllメソッドでデータを取得すると、ヌルとなるid属性以外のオブジェクトが正しく返されます。 私がtrueに設定さgeneratedId属性を持つデータベースフィールドタグを使用しています、ただのドキュメントのように述べている:
は、フィールドが自動生成されたidフィールドであるかどうかをブール
をgeneratedId。デフォルトは falseです。クラス内でこのセットを持つことができるフィールドは1つだけです。これは、 データベースに、挿入されたすべての行の対応するIDを自動生成するように指示します。 generated-idを持つオブジェクトがDao.create() メソッドを使用して作成されると、データベースは、 になるオブジェクトのidを生成し、createメソッドでオブジェクトに設定します。一部のデータベース では、生成されたIDのシーケンスが必要です。この場合、シーケンス名 が自動生成されます。シーケンスの名前を指定するには、 generatedIdSequenceを使用します。 this、id、およびgeneratedIdSequenceのいずれか1つのみが に指定できます。 See section generatedIdを持つフィールド。
私のクラスがあります:
@DatabaseTable(tableName = "LANGUAGE")
public class Language {
@DatabaseField(generatedId = true, columnName = "language_id")
private Long id;
@DatabaseField(columnName = "language_locale")
private String locale;
@DatabaseField(columnName = "language_active")
private boolean active;
@DatabaseField(columnName = "language_name")
private String name;
// getters and setters...
}
私はこのようなデータを挿入しています:
Language pt = new Language();
pt.setActive(true);
pt.setName("Português");
pt.setLocale("pt_PT");
dao.create(pt);
Language en = new Language();
en.setActive(true);
en.setName("English");
en.setLocale("en_EN");
dao.create(en);
// here, both pt and en have an id, 1 and 2, respectively
しかし、ときに私は
dao.queryForAll()
ロケール、アクティブおよび名前の属性を実行しますOKですが、idはnullです。
イデアはありますか?私はすでにをコミットの後にの後にを作成しようとしましたが、何も変わりません。
データベース設定ファイルが完全に更新されていますか?私はこれを見たことも聞いたこともなく、特にIDフィールドではこれを見たことがありません。 'dao.queryForId(...)'は動作しますが、idを埋めていないのでしょうか? – Gray
queryForId(たとえば、id 1を渡す)はnullを返します。それは非常に奇妙なことですが、createメソッドがその仕事をしているようですが、idを持たないエンティティをデータベースに格納しているようです...私の経験では、ちょっとした間違いがありますが、試行錯誤でしか見つかりません...ありがとう – rmpt
idはcreateメソッドによって正しく/逐次的に割り当てられているので、エンティティは実際にデータベースにあるようです。キャッシュに問題があると思いますか? – rmpt