在 Android 中有3个表扩展了SugarRecord(SugarOrm Library) 1. UserItem 2. AccountItem 3. CommunityItem
每个用户都有一个帐户,一个表来保存用户的地址,电话,一些社交地址,......
我使用的代码是:
UserItem:
int fieldId;
int userId;
String name;
String family;
String cover;
String avatar;
// ==================== RelationShips ...
AccountItem accountItem;
CommunityItem communityItem;
// How to define Get/Set To Relation Items
AccountItem:
int userId;
String authKey;
String authValue;
String userName;
String email;
String password;
String type;
String token;
String url;
String createDate;
String updateDate;
CommunityItem:
int userId;
String phone;
String mobile;
String facebook;
String instagram;
String linkedIn;
String summer;
String website;
String url;
String margin;
String state;
String city;
String address;
但它不起作用,如何定义与此示例的关系?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以在Java代码中设置对象:
UserItem user = new User():
//...
//Setters
//..
AccountItem accountItem = new AccountItem();
//...
//Setters
//..
accountItem.save(); //Make sure you save this registry to your database first.
user.accountItem = accountItem)
user.save();
请记住在UserItem类中使用'public'作为AccountItem属性
答案 2 :(得分:1)
已经很久了,但无论如何...... @satyan在此issue#60建议的最简单的方式来做一对多的关系。
假设一个User
有多个Account
,可以使用自定义getter来实现,如下所示:
import com.orm.dsl.Ignore;
class User extends SugarRecord<User> {
private int fieldId;
private int userId;
private String name;
//...
@Ignore
private List<Account> accounts;
public List<Account> getAccounts(){
return Account.find(Account.class, "user = ?", this.id.toString());
}
}
class Account extends SugarRecord<Account> {
private int userId;
private String authKey;
private String authValue;
//...
private User user;
}
注意:我们可以添加@Ignore
,因为我们不需要保留accounts
,因为它由user
类中的引用Account
处理。一个简单的用法示例如下:
User admin = new User();
admin.userId = 1;
admin.name= "admin";
if (admin.save()){
Account a1 = new Account();
a1.userId = 1;
a1.user = admin;
if (a1.save()){
Log.d("TAG", "Account saved.");
}
}
一对一的关系应该更容易,只需使用参考字段,如documentation所示。
此时的当前版本为1.5。
希望这有帮助!