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 如果你在做多對多的關系,有其他的表或實體參與,可以給目標屬性添加這個額外的注解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM