Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397319
  • 博文数量: 78
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:39
文章分类

全部博文(78)

文章存档

2016年(7)

2015年(1)

2014年(35)

2013年(35)

我的朋友

分类: Android平台

2016-06-14 20:53:34

GreenDao 中,实体间的关联通过 to-one to-many 来实现。
一对一

GreenDao 中实现一对一的关联需要讲一个实体类的主键作为另一个实体类的外键。

    Entity person = schema.addEntity("Person");

    person.addStringProperty("name").primaryKey();

    person.addStringProperty("sex");

    person.addLongProperty("age");

 

    Entity idCard = schema.addEntity("IDCard");

    idCard.addLongProperty("cardId").primaryKey();

    idCard.addLongProperty("validity");

 

    // 两个实体类通过 Property 来建立关联,此操作会在 person 表中增加一个外键,此外键是 idCard 表中的主键

    Property personProperty = person.addLongProperty("cardId").getProperty();

    // 第一个参数为目标实体类,第二个参数为此表中的外键属性

    person.addToOne(idCard, personProperty);

 

    Property idCardProperty = idCard.addStringProperty("name").getProperty();

    idCard.addToOne(person, idCardProperty);


对多


订单,一个人会有很多订单,但每个订单只能是一个人的,这样就会产生一对多的关联。


     Entity order = schema.addEntity("Order");
    order.addLongProperty("orderId").primaryKey();
    order.addLongProperty("money").notNull();
 
    Property orderProperty = order.addStringProperty("name").getProperty();
 
    // 构建一对多的关联
    // 第一个参数为目标实体,第二个参数为目标属性,也就是 person 的主键(order 的外键),第三个参数为属性名
    person.addToMany(order, orderProperty, "orders");
    // 订单对用户为一对一的关联
    order.addToOne(person, orderProperty);


这样在生成的实体类中 Person 实体中会多出 List orders 的属性,并且提供了 getOrders()方法来得到用户的所有订单。
Order
实体类中会多出 name 属性,也就是 Person 表的主键,同时也提供了 getPerson()方法来得到该订单对应的用户
多对多

GreenDao 不支持多对多的关系,但是,我们可以通过其它方法来实现。
实现多对多关联需要建立一张中间表,其它两张表都要与中间表构建一对多的关联。
比如学生与课程之间的连系,一个学生可以选择多种课程,而一个课程可以被多个学生选择。


    Entity course = schema.addEntity("Course");
    course.addLongProperty("courseId").primaryKey();
    course.addStringProperty("courseName").notNull();
 
    // 中间表有其它两个表的主键作为外键
    Entity personCourse = schema.addEntity("PersonCourse");
    Property personName = personCourse.addStringProperty("name").getProperty();
    Property courseId = personCourse.addLongProperty("courseId").getProperty();
 
    // 分别构建一对多的关联
    person.addToMany(personCourse, personName);
    course.addToMany(personCourse, courseId);
 
    personCourse.addToOne(person, personName);
    personCourse.addToOne(course, courseId);


 

这样生成的实体类中,Person Course 实体中都会有List personCourseList 属性,
再来看一下PersonCourse 实体类,有getPerson() getCourse() 方法获得相应的学生和课程。
这样,我们通过学生和课程得到PersonCourse 的集合后,通过这两个方法就可以得到相应的学生或者课程的信息。

转载:

阅读(1717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~