GreenDao中一对多的处理
问题描述:
现有一个实体类Card(证件)
其中有属性:id、证件名称、姓名、卡号、备注,以及证件的照片,其中证件的照片可能有多张(1到4张),故需要用到一对多的关系。
思路:设计两张表,然后建立对应关系
证件类:Card
照片类:Photo
GreenDao语法:
@ToMany(referencedJoinProperty = "parentId")
一、定义Card类
//实体类:证件 Card @Entity public class Card { //ID主键自增 @Id(autoincrement = true) private Long id; @NotNull private String card_name;//证件名称 @NotNull private String username;//证件人姓名 @NotNull private String card_number;//卡号 private String remark;//备注 //cardId为Photo类中定义的一个属性 @ToMany(referencedJoinProperty = "cardId") private List<Photo> photoList; }
二、定义Photo类
//实体类Photo @Entity public class Photo { //ID主键自增 @Id(autoincrement = true) private Long id; @NotNull private String photo_path;//证件照片路径 @NotNull private Long cardId;//设计此字段,然后在Card中引用它,以便于Card来识别它 }
三、添加数据
private void AddRecord() { String cardname = et_card_name.getText().toString(); String username = et_user_name.getText().toString(); String cardnumber = et_card_number.getText().toString(); String remark = et_remark.getText().toString(); Card card = new Card(cardname, username, cardnumber, remark); cardDao.insert(card); //count_photo为图片的总数 //photoPathList为图片的绝对路径的List集合 for (int i = 0; i < count_photo; i++) { Photo photo = new Photo(); photo.setCardId(card.getId()); photo.setPhoto_path(photoPathList.get(i)); photoDao.insert(photo); } Toasty.success(context,"保存完毕").show(); }
UI界面
- 存储完成后文件如下所示:
- 数据库:可以看到不同的
Photo
对应了相同的Card
1、Card表:
2、Photo表: