使用嵌入的外部集合持久保存对象的正确方法是什么?目前我使用以下内容但是如果我在zonePlay已经存在时向客户zonePlays集合添加“zoneplay”对象,则会收到错误Could not create data element in dao
。是否有某种upsert方法我应该用来添加到国外集合中,还是我需要在插入之前以某种方式检查是否存在?
@DatabaseTable
public class Customer {
@DatabaseField(id = true)
public int id;
@ForeignCollectionField(eager = true)
public ForeignCollection<ZonePlay> zonePlays;
@DatabaseField
public String email;
public Customer(String json) {
final JSONArray zonesJson = customerJson.getJSONArray("zoneplays");
this.zonePlays = DatabaseHelper.getInstance(ctx).getCustomerDao().getEmptyForeignCollection("zonePlays");
for (int i = 0; i < numZones; i++) {
final JSONObject rawZone = zonesJson.getJSONObject(i);
ZonePlay zp = new ZonePlay();
zp.id = rawZone.getInt("id");
zp.score = rawZone.getInt("score");
zp.Customer = this;
this.zonePlays.add(zp);
}
}
@DatabaseTable
public class ZonePlay {
@DatabaseField(id = true)
public int id;
@DatabaseField(foreign=true)
public Customer customer;
}
然后我运行
Customer cust = new Customer(client.response);
DatabaseHelper db = DatabaseHelper.getInstance(getApplicationContext());
db.getDao(Customer.class).createOrUpdate(cust);
答案 0 :(得分:0)
使用嵌入的外部集合持久保存对象的正确方法是什么?
“正确”的方式可能是使用它自己的DAO添加元素 - 而不是通过外部集合。这样您就可以使用createOrUpdate(...)
方法:
Dao<ZonePlay, Integer> zoneDao = DatabaseHelper.getInstance(ctx).getZoneDao();
for (int i = 0; i < numZones; i++) {
final JSONObject rawZone = zonesJson.getJSONObject(i);
ZonePlay zp = new ZonePlay();
zp.id = rawZone.getInt("id");
zp.score = rawZone.getInt("score");
zp.Customer = this;
zoneDao.createOrUpdate(zp);
}
我收到错误如果我在zonePlay已经存在时向客户zonePlays集合添加“zoneplay”对象,则无法在dao中创建数据元素。
右。如果您尝试将ZonePlay
添加到Customer
的外国集合中,则会尝试添加到表中。如果表中已存在ZonePlay
,则会抛出异常。