ORMLight升级数据库如何删除自动增量并插入新的外部集合

时间:2015-11-13 13:10:47

标签: android android-sqlite ormlite

我正在尝试升级ormlite / sqlite android db。

我有一个像这样的java类:

@DatabaseTable
public class Assessment {
   @DatabaseField(generatedId = true)
   private Long assessmentId;
   @DatabaseField
   private java.lang.String assessmentName;

   ...
}

并希望它改变如下:

@DatabaseTable
public class Assessment {
   //Change from autoincrement to insertable id
   @DatabaseField(id = true)
   private Long assessmentId;
   @DatabaseField
   private java.lang.String assessmentName;


   //NEW FIELD
   @ForeignCollectionField
   private java.util.Collection<AssessmentEntry> assessmentEntries;
   ...
}

我创建了一个新的模型类:

@DatabaseTable
public class AssessmentEntry implements Comparable<AssessmentEntry>{

   @DatabaseField(id = true)
   private Long AssessmentEntryId;
   @DatabaseField
   private String entryName;
   @DatabaseField
   private int orderNumber;
   @DatabaseField(foreign = true)
   private Assessment assessment;
   ...
}

我还使用OrmLiteConfigUtil来创建映射文件(如果这是相关的)。

现在我正在尝试通过onUpgrade(...)

将这些更改添加到数据库中
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
    if(oldVersion < 2) {
        try {
            //Create new table
            TableUtils.createTable(connectionSource, AssessmentEntry.class);
            //implement changes for class Assessment
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

所以我的问题是:我是否需要通过原始查询更改评估表以将更改从generatedId应用到id?我是否需要根据表格评估中的外国收集进行任何特定于ormlite的更改?

1 个答案:

答案 0 :(得分:1)

  

所以我的问题是:我是否需要通过原始查询更改评估表以将更改从generatedId应用到id?

是的,你这样做。我会比较sqlite输出,看看它在那里的期望。您可能需要创建一个新的assessmentId2列,为其指定当前assessmentId的值,然后删除当前的一个,并将新的一个重命名为assessmentId

  

我是否需要根据表评估中的外国收集进行任何特定于ormlite的更改?

没有。所有外国收藏品都是id。如何创建它并不重要。