2016-04-07 11 views
0

私はGreenDAOで新しくなっています。私は「レッスン」へのidカラムを追加して自動increament作るが、これは私のGeneratorクラスGreenDao "myEntity.addIdProperty()。autoIncreament()"が追加されているにもかかわらず、 "PRIMARY KEYは一意である必要があります"エラーが発生する

public class FlashCardGenerator { 
    public static void main(String args[]) throws Exception { 
     Schema schema = new Schema(1, "com.flashcard.model"); 

     Entity lesson = schema.addEntity("Lesson"); 
     lesson.addIdProperty().autoincrement(); 
     lesson.addStringProperty("LessonName"); 
     lesson.addStringProperty("ShortDes"); 
     lesson.addStringProperty("LongDes"); 

     Entity card = schema.addEntity("Card"); 
     card.addIdProperty().autoincrement(); 
     card.addStringProperty("SourceText"); 
     card.addStringProperty("TargetText"); 
     card.addByteArrayProperty("Image"); 

     Property lessonID = card.addLongProperty("lessonID").getProperty(); 
     card.addToOne(lesson, lessonID); 
     ToMany lessonToCard = lesson.addToMany(card, lessonID); 
     lessonToCard.setName("cards"); 

     new DaoGenerator().generateAll(schema,"../app/src/main/java"); 
    } 
} 

です。私はこのコード

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "flashcard-db", null); 
SQLiteDatabase db = helper.getWritableDatabase(); 
DaoMaster daoMaster = new DaoMaster(db);DaoSession daoSession = daoMaster.newSession(); 
LessonDao lessonDao = daoSession.getLessonDao(); 
Lesson lesson = new Lesson(1L,"Demo L1", "Nothing", "nothing"); 
long l = lessonDao.insert(lesson); 

if (l > 0) { 
    Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT); 
} else { 
    Toast.makeText(getApplicationContext(), "Fail! OMG", Toast.LENGTH_SHORT); 
} 

私はプロジェクトを実行する最初の時間を使用する場合は、レコードが正常に挿入されて、私はプロジェクトを実行する二回目は、私が「PRIMARY KEYはユニークでなければなりません」エラーを得ました。これは、プライマリキーが暴力的な場合によくあるエラーです。しかし私はそれもAutoIncreamentに設定していますか?私はIDを1Lに設定している可能性がありますか?生成クラスは変更することはお勧めできません。レッスンのコンストラクターにはすべて「Id」パラメーターがあります。

答えて

1

GreenDao supportで検索したところ、すばやく、解決策が見つかりました。「長い番号」ではなく、IDパラメータをNULLに設定するだけです。それは働いている。

Lesson lesson = new Lesson(null ,"Demo L1", "Nothing", "nothing"); 
     long l = lessonDao.insert(lesson); 
:私は挿入するためのコードがなります。この

のようなものを満たした後、私は誰にもここにポストを維持します

関連する問題