Sugar ORM使用误区

本文详细介绍了在SUGAR ORM框架中处理实体间关联的方式,并针对update()方法的行为进行了说明,包括常见的误区及正确用法。

最近在项目里使用了sugar这个框架,使用很简单,但是个人的失误和不注意,导致在一个问题上花费太多的时间,特此记录。

Github地址(https://github.com/satyan/sugar);官方文档地址(http://satyan.github.io/sugar/)

1,关联信息的存储

假设业务类A,B;A与B为一对多关系
public class A extends SugarRecord{
List<B> bList;
}

public class B extends SugarRecord{
A a;
}
要存储A,B,依据官网介绍,必须先存储A,再存储B。存储B时注意,新建一个B实例时要传入一个A示例a作为参数,作为参数的a,必须是从数据库里查找的A实例
比如:
A a = new A();
a.save(); //存储a
B b = new B(a);
b.save();//注意这种方式,a,b无法关联

//正确方式
a = A.find();
B b = new B(a);
b.save();//这样才能关联a,b

原因是,sugarORM建的表所储存的记录都有条id(废话),表B中A字段所存储的信息其实是表A中某条记录的id;
上述的错误方法中,实例a的自父类继承的属性id为空,执行save()方法后才会分配id,但是实例a并未被修改,所以id属性仍为空;存储b时,b的属性A的值为空;a与b并未关联。从数据库中查询得到的a的id属性为数据表中对应记录的id值,不为空,所以a与b才能关联。

2,update()的使用

其中sugar中update()这个方法与我所期望的不一样,使用前要确定表的唯一值,这点不说了。

之前我给一张表(比如表C)指定了两个唯一值,从数据库得到一条记录c;更新一个属性得到c1;执行c1.update(),目的是更新记录c为记录c1,但是执行后后发现整个表都被更新了,整个表只剩c1记录。

查看了官网,发现正确的更新方法如下:

Update Entity:

Book book = Book.findById(Book.class, 1);
book.title = "updated title here"; // modify the values
book.edition = "3rd edition";
book.save(); // updates the previous entry with new values.
本人也更新过其他只有一个唯一值的表记录,结果如我所愿的更新了。

原因我猜测如下,执行没有id值的实例的update()方法时,表会新增一条记录,如果实例有id值,整个表都会更新。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值