• GreenDao 3.x 注解中ToOne和ToMany的个人理解


    GreenDao是什么东西这个就不用多说了。自从GreenDao升级到3.0之后,编译的方法发生了改变。当然这个改变是有助于快速开发的。

    区别在哪随便百度一下都可以知道。这里就不多说了。

    这里主要说的是关于3.0之后实体类通过注解的方式使用。

    - @Id :主键 long/Long型,可以通过@Id(autoincrement = true)设置自增长 
    - @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”) 
    - @NotNul:设置数据库表当前列不能为空 
    - @Transient :添加次标记之后不会生成数据库表的列 
    1.)索引注解 
    - @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 
    - @Unique:向数据库列添加了一个唯一的约束 
    2.)关系注解 
    - @ToOne:定义与另一个实体(一个实体对象)的关系 
    - @ToMany:定义与多个实体对象的关系

    这里讲的是ToOne和ToMany的用法

    原来的ToOne是这样用的:

    Property property = entity.addLongProperty("customerId").getProperty(); entity.addToOne(Customer, property);  

    3.0之后的用法我借用了别人的代码:

    @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;  
    }  

    这里的意思是 customerId作为外键与Customer中的主键(也就是id)相连。

    举个例子一个User类里面有个关于用户头像地址的参数,我们假设为icon,类型为int。

    同时,我们也有一个实体类Picture专门保存icon的数据,id啊,大小啊什么的。在User类里面使用了ToOne,在项目运行的时候,获取User里面的icon,实际上就是获取了Picture类里面的数据。大概是这个意思。

    接下来说ToMany,这个有点复杂,先引用一下其他人的代码吧:

    @Entity
    public class User {
        @Id private Long id;
      
        @ToMany(referencedJoinProperty = "ownerId")
        private List<Site> ownedSites;
    }
      
    @Entity
    public class Site {
        @Id private Long id;
        private long ownerId;
    }
     
    // ----------------------------
     
    @Entity
    public class User {
        @Id private Long id;
        @Unique private String authorTag;
      
        @ToMany(joinProperties = {
                @JoinProperty(name = "authorTag", referencedName = "ownerTag")
        })
        private List<Site> ownedSites;
    }
      
    @Entity
    public class Site {
        @Id private Long id;
        @NotNull private String ownerTag;
    }
     
    // ----------------------------
     
    @Entity
    public class Site {
        @Id private Long id;
      
        @ToMany
        @JoinEntity(
                entity = JoinSiteToUser.class,
                sourceProperty = "siteId",
                targetProperty = "userId"
        )
        private List<User> authors;
    }
      
    @Entity
    public class JoinSiteToUser {
        @Id private Long id;
        private Long siteId;
        private Long userId;
    }
      
    @Entity
    public class User {
        @Id private Long id;
    }

    这里根据分割线分成3种的情况

    第一种 Site类的ownerId作为外键,与User的主键相连。

    第二种 Site类的ownerId作为外键,与User的非主键不为空的键相连。
    第三种。还没理解。

    @ToMany的属性referencedJoinProperty,类似于外键约束。

    @JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。

    @JoinEntity 如果你在做多对多的关系,有其他的表或实体参与,可以给目标属性添加这个额外的注解

  • 相关阅读:
    [C++]DirectShow检测音视频输入设备及其采集参数
    [C#] 使用Accord.Net,实现相机画面采集,视频保存及裁剪视频区域,利用WriteableBitmap高效渲染
    [C#]使用第三方开源库iText7.pdfHtml,将Html转换成Pdf,以及如何以Html作为打印模板
    C# 佳能相机SDK对接,采集并保存视频,使用WriteableBitmap高效渲染
    wpf常用类型转换器,支持基元类型、可空基元类型、枚举
    wpf单位转换及DPI获取
    使用wpf技术实现画图工具
    InstallShield 创建 visual studio 工程的时候 指向 任意 visual studio 版本 方法 (修改 计算机 默认 visual studio shell 版本)
    WPF ScrollViewer(滚动条) 自定义样式表制作 再发一套样式 细节优化
    C#实现屏幕指定区域截屏
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9051987.html
Copyright © 2020-2023  润新知