2015-09-16 3 views
0

Я в настоящее время разрабатываю приложение, где я использую базу данных. Для этого я использую библиотеку GreenDAO. Моя проблема заключается в том, что, как представляется, первичный идентификатор, генерируемый GreenDAO, не генерируется автоматически при попытке вставить новую запись. Вот соответствующие CodeSnippets:Android sqlite ID не сгенерирован

Dao Генератор

Entity entity = schema.addEntity("Client"); 
entity.getAdditionalImportsEntity().add("path.to.package.Entity"); 
entity.setSuperclass("Entity"); 
entity.addIdProperty().autoincrement(); 
entity.addBooleanProperty("modified"); 
entity.addBooleanProperty("inactive"); 
entity.addStringProperty("hash").index(); 
... 

Сохранить метод каждого Entity-объекта

public void save() { 
    if(TextUtils.isEmpty(getHash())) { 
     generateHash(); 
    } 
    if(!isAttached()) { 
     DatabaseHelper.getSession().insert(this); 
    } 
    setLinkedHashes(); 
    modify(); 
    DatabaseHelper.getSession().update(this); 
} 

DatabaseHelper.getSession() возвращает получает текущий daoSession, хэш -методы только заполняют/генерируют некоторые хеши, если это необходимо, и на самом деле не связаны.

Если теперь я хочу, чтобы сохранить следующую Entity

this = {[email protected]} 
accuracy = null 
hash = {[email protected]} "6993298135964198b4f135e922e7cd8b" 
id = null 
inactive = null 
lastSeen = null 
modified = null 
nickname = {[email protected]} "Test" 
status = null 

Я получаю следующее сообщение об ошибке,

android.database.sqlite.SQLiteConstraintException: CLIENT.CLIENT_ID may not be NULL (code 19) 
      at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
      at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782) 
      at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
      at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
      at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:348) 
      at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293) 
      at de.greenrobot.dao.AbstractDaoSession.insert(AbstractDaoSession.java:63) 
      at path.to.package.dao.Entity.save(Entity.java:48) 
      at path.to.package.utils.DatabaseHelper.getSelf(DatabaseHelper.java:76) 
      at path.to.package.updateService.LocationService$LocationListener.onLocationChanged(LocationService.java:40) 
      at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279) 
      at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208) 
      at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      at dalvik.system.NativeStart.main(Native Method) 

Я бегу к стене и не может найти свою ошибку. Может ли кто-нибудь указать мне в правильном направлении?

ответ

0

Решил проблему: при создании я добавил отношение toMany - и перепутал цель и исходный объект. Таким образом, у клиентского объекта был второй client_id, который не использовался и не обрабатывался должным образом.

Смежные вопросы