【发布时间】:2016-06-21 08:27:49
【问题描述】:
我正在学习如何将 ORMLite 与 android 一起使用。我的问题是我从服务器接收到带有 ID 的对象,我认为最好为我的数据库使用相同的 ID。这意味着我没有使用generatedId = true,因此不能使用foreignAutoGenerate = true。
public class Artwork {
@DatabaseField(id = true, columnName = "id")
String id;
@DatabaseField
String name;
@DatabaseField
String file;
@DatabaseField(columnName = "user_id", foreign = true, foreignAutoCreate = true)
User owner;
}
如您所见,Artwork 引用了拥有它的用户。两者都已经在服务器端有 ID,我想将其用作我的数据库的 ID。
public class User {
@DatabaseField(id = true, unique = true)
String id;
@DatabaseField
String name;
}
下面是魔法应该发生的地方......
Artwork artwork = new Artwork();
artwork.setName("name");
artwork.setFile("filepath");
artwork.setId("generated_by_server_0000");
User owner = new User();
owner.setId("generated_by_server_0001")
owner.setName("user");
artwork.setOwner(owner);
DatabaseHelper dbHelper = OpenHelperManager.getHelper(this, DatabaseHelper.class);
Dao<Artwork, String> artworkDao = dbHelper.getArtworkDao();
Dao<User, String> userDao = dbHelper.getUserDao();
userDao.create(owner);
artworkDao.create(artwork);
List<Artwork> artworksOnDb = artworkDao.queryForAll();
如何使用 ORMLite 轻松持久化这些对象但自己设置 ID?
【问题讨论】:
-
我找到的解决方案是将 id 类型更改为 Long 并使用
generatedId = true, allowGeneratedIdInsert = true