一對一關系 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參數(shù):對于更復雜的關系狰域,您可以指定@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);
//經(jīng)過上面中間表的操作后,商品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
官網(wǎng):http://greenrobot.org/greendao/documentation/relations/