我正在尝试升级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的更改?
答案 0 :(得分:1)
所以我的问题是:我是否需要通过原始查询更改评估表以将更改从generatedId应用到id?
是的,你这样做。我会比较sqlite输出,看看它在那里的期望。您可能需要创建一个新的assessmentId2
列,为其指定当前assessmentId
的值,然后删除当前的一个,并将新的一个重命名为assessmentId
。
我是否需要根据表评估中的外国收集进行任何特定于ormlite的更改?
没有。所有外国收藏品都是id。如何创建它并不重要。