Android数据库操作Greendao主键设置

概述

在使用Greendao操作数据库时,对于主键的定义不是很明确,正常我们在使用数据库时会有大概三种情况下的主键定义

ID主键

如题,就是使用id值作为主键,这个也是greendao内部默认的

@Id(autoincrement = true)
private Long id;

这里有个坑,一定要提醒一下,掉进去的人还挺多。
就是在定义id的数据类型时,一定要使用Long类型,而不能使用long简单类型。

完整代码

@Entity(nameInDb = "tb_note") // greendao解析注解,描述中指定表名称
public class NoteEntity implements Serializable {
    private static final long serialVersionUID = 6049457346549266619L;
    @Id(autoincrement = true)
    private Long id;
    private String note_desc;
}

唯一值主键

这个貌似有点费话,其实是说我们需要一个主键,但不是id,主键本身都是唯一的。

直接上实例了,通过唯一索引的形式定义主键

@Index(unique = true) // 定义唯一约束索引,当作主键使用
private String note_no;

完整代码

@Entity(nameInDb = "tb_note") // greendao解析注解,描述中指定表名称
public class NoteEntity implements Serializable {
    private static final long serialVersionUID = 6049457346549266619L;
    @Id(autoincrement = true) // 始终保留一个自增长字段当作默认主键
    private Long id;
    @Index(unique = true) // 定义唯一约束索引,当作主键使用
    private String note_no;
    private String note_desc;
}

复合主键

这个在我们使用关系型数据库时使用的并不少,但在greendao里面却没有这样的安排,没搞懂为什么,那就只能自己想办法解决了

基本思想和上面一样,所以借助indexesunique唯一索引来当作复合主键

建议还是要定义一个自增长的主键id,只是使用时不去管它,如果需要则传入null值即可。毕竟greendao内部源码里很多还是依托于这个id主键的。

另外就是,插入数据时使用insertOrReplace()方法即可,如果定义的复合主键存在则会替换原有数据。

@Entity(nameInDb = "tb_todo", indexes = {
        @Index(value = "todo_no ASC, todo_ser ASC", unique = true) // 定义组合主键
})
public class ToDoEntity implements Serializable {
    private static final long serialVersionUID = 808736119697275862L;
    @Id(autoincrement = true) // 始终保留一个自增长字段当作默认主键
    private Long id;
    private String todo_no;
    private Integer todo_ser;
    private String todo_desc;
    private Integer todo_status;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值