美文网首页数据库
GreenDao3+ 对应关系

GreenDao3+ 对应关系

作者: 灿烂呀 | 来源:发表于2019-08-07 17:03 被阅读0次

一对一关系 1:1 @ToOne

@Entity
public class Order {
    @Id private Long id;

    private long customerId;

    @ToOne(joinProperty = "customerId")
    private Customer customer;
}

@Entity
public class Customer {
    @Id private Long id;
}

一对多 1:N @ToMany

@Entity
public class Customer {
    @Id private Long id;
 
    @ToMany(referencedJoinProperty = "customerId")
    @OrderBy("date ASC")
    private List<Order> orders;
}
 
@Entity
public class Order {
    @Id private Long id;
    private Date date;
    private long customerId;
}

referencedJoinProperty 应该只能是id,如果采用其他字段作为外键就不能用这个了。
joinProperties参数:对于更复杂的关系,您可以指定@JoinProperty注释列表。每个@JoinProperty都需要原始实体中的source属性和目标实体中的引用属性。

@Entity
public class Customer {
    @Id private Long id;
    @Unique private String tag;
 
    @ToMany(joinProperties = {
            @JoinProperty(name = "tag", referencedName = "customerTag")
    })
    @OrderBy("date ASC")
    private List<Site> orders;
}
 
@Entity
public class Order {
    @Id private Long id;
    private Date date;
    @NotNull private String customerTag;
}

多对多 n:m @ToMany
使用@JoinEntity 注解 +中间表的形式

@Entity
public class Product {

    @Id
    private Long  id;
    private String name;

    @ToMany
    @JoinEntity(entity =JoinProductsWithOrders.class,sourceProperty = "productId",targetProperty = "orderId")
    private List<Order>  orders;
}
@Entity
public class Order {

    @Id
    private  Long id;

    private String  name;

    @ToMany
    @JoinEntity(entity = JoinProductsWithOrders.class,sourceProperty = "orderId",targetProperty = "productId")
    private List<Product>  products;
}
@Entity
public class JoinProductsWithOrders {

    @Id
    private Long id;
    private  Long   productId;
    private  Long   orderId;
}

build 后即可,不会生成setProduts setOrders。
同时双方不直接持有对方的字段。通过中间表的形式。

  Product  product =new Product();
        product.setId(1l);
        product.setName("衣服");
        EntityManager.getInstance().getProductDao().insert(product);

        Product  product1 =new Product();
        product1.setId(2l);
        product1.setName("裤子");
        EntityManager.getInstance().getProductDao().insert(product1);

        Order  order =new Order();
        order.setId(1l);
        order.setName("订单1");
        EntityManager.getInstance().getOrderDao().insert(order);

        Order  order1 =new Order();
        order1.setId(2l);
        order1.setName("订单2");
        EntityManager.getInstance().getOrderDao().insert(order1);

       //订单1包含商品1,商品2 
        JoinProductsWithOrders  jw =new JoinProductsWithOrders();
        jw.setOrderId(1l);
        jw.setProductId(1l);
        EntityManager.getInstance().getJoinProductsWithOrders().insert(jw);


        JoinProductsWithOrders  jws =new JoinProductsWithOrders();
        jws.setOrderId(1l);
        jws.setProductId(2l);
        EntityManager.getInstance().getJoinProductsWithOrders().insert(jws);

        //订单2 包含 商品1,商品2
        JoinProductsWithOrders jw1 =new JoinProductsWithOrders();
        jw1.setOrderId(2l);
        jw1.setProductId(1l);
        EntityManager.getInstance().getJoinProductsWithOrders().insert(jw1);

        JoinProductsWithOrders jw1s =new JoinProductsWithOrders();
        jw1s.setOrderId(2l);
        jw1s.setProductId(2l);
        EntityManager.getInstance().getJoinProductsWithOrders().insert(jw1s);
       //经过上面中间表的操作后,商品1,商品2分别再订单1,订单2中了
 List<Order>  orders=  EntityManager.getInstance().getOrderDao().queryBuilder().list();
              for (Order  order:orders){
                  for (Product product:order.getProducts()){
                      Log.e("返回",product.getName()+"~~~"+product.getId());
                  }
              }

输出:

08-07 16:48:34.944 13460-13460/com.green.dao E/返回: 订单1
08-07 16:48:34.946 13460-13460/com.green.dao E/返回: 衣服~~~1
08-07 16:48:34.946 13460-13460/com.green.dao E/返回: 裤子~~~2
08-07 16:48:34.950 13460-13460/com.green.dao E/返回: 订单2
08-07 16:48:34.951 13460-13460/com.green.dao E/返回: 衣服~~~1
08-07 16:48:34.951 13460-13460/com.green.dao E/返回: 裤子~~~2

官网:http://greenrobot.org/greendao/documentation/relations/

相关文章

  • GreenDao3+ 对应关系

    一对一关系 1:1 @ToOne 一对多 1:N @ToMany referencedJoinProperty...

  • 谈对应关系

    首先,在这篇文章中,我所阐述的对应关系并非是波尔在处理原子时假设角动量量子化所用的对应原理,即在原子范畴内的现象与...

  • GreenDao3+ 介绍

    简介GreenDao可以说是当今最流行,最高效而且还在迭代的关系型数据库。关系型数据库:ORM(Object Re...

  • GreenDao3+ 升级

    给数据库添加一个字段: 通常只需要在对应的表(实体类)中添加想要的字段 ,然后如图操作! 即Rebuild Pro...

  • 行测

    II言语理解与表达 一、逻辑填空 分析对应关系;辨析词语差异;锁定优势选项 1、分析对应关系 包括的对应关系有解释...

  • 对应关系的朋友

    我忽然发现,没有人完全了解我,我父母,我最好的朋友,她们了解的都不是完整的我,虽然在跟他们相处的过程中,我都是毫无...

  • 【Python_perl】列表_数组求并集,交集,补集

    为了方便对应这里给出perl python 对应关系 python,perl数据结构关系:数组(array) ...

  • css 透明度和百分比对应值

    透明度百分比和十六进制对应关系表格,本对应关系以#fff对应100%为基础。例如,透明度为51%(0.51),对应...

  • Hive On Spark搭建(cdh)

    hive 和 spark版本之前有强对应关系 apache hive 和 spark 对应关系表 cdh hive...

  • Mybatis(三)Mybatis映射开发

    4.1 一对一 4.1.1 表对应关系, 一个订单对应一个用户 4.1.2 实体对应关系 4.1.3 配置 Ord...

网友评论

    本文标题:GreenDao3+ 对应关系

    本文链接:https://www.haomeiwen.com/subject/yrladctx.html