ObjectBox[四] 数据库持久化之实体注解

ObjectBox[一] 特性

ObjectBox[二] 教程:如何开始使用ObjectBox

ObjectBox[三] 教程:安装和基础

ObjectBox[四] 数据库持久化之实体注解

ObjectBox[五] 基本操作:查询

ObjectBox[六] 数据监听和RX(Data Observers and Reactive Extensions)

ObjectBox[七] 支持LiveData(Android体系结构组件)

ObjectBox[八] 关系

ObjectBox[九] 数据模型变更

ObjectBox[十] 自定义类型

ObjectBox[十一] 事务

ObjectBox[十二] Meta Model, IDs, and UIDs

ObjectBox[十三] 数据调试


ObjectBox是一个直接保存对象的数据库。为了清晰,我们有时会调用那些可持久化的对象实体。要让ObjectBox知道哪些类是实体,请向其添加注解。然后ObjectBox就可以自动生成持久化需要的代码。
下面是一个例子:

@Entity
public class User {

    @Id
    private long id;

    private String name;

    @Transient
    private int tempUsageCount; // not persisted

   // getters and setters for id and user ...
}

@Entity注解表明User类是一个可以持久化的实体。将触发ObjectBox为此类生成定制的持久化代码。
注意:dumbs class (POJOs :Plain Old Java Objects, 简单洁净Java对象 )(java Bean类)作为实体是一个比较好的做法

注意: 如果您使用Kotlin来定义您的实体类,请查看ObjectBox和Kotlin文档

对象ID:@Id

在ObjectBox中,每个对象都有一个long类型的ID 来有效地获取或操作对象。在您的实体的长整型属性上使用 @Id注解 :

@Entity
public class User {

    @Id
    private long id;

    ...
}

对象ID有几点需要注意:

  • 值0(零)和-1(0xFFFFFFFFFFFFFFFF)不能用作ID。

  • ID为0的对象(如果ID是Long类型,则为 null)被认为是新的。插入这样的对象,数据库会认为是新数据并分配一个新的id。

  • 默认情况下,对象ID由ObjectBox分配。对于每个新的对象,ObjectBox将分配一个未使用的ID,该ID高于当前在Box中使用的最高ID值。例如,如果在一个Box中有两个对象ID 1和ID 100,则存入的下一个对象将被分配ID 101。

  • 如果您尝试使用ID大于当前最高ID的对象,则ObjectBox将引发错误。

  • 如果要自己分配ID,您可以将ID注解更改为@Id(assignable = true) 。这将允许ID可以有任何值,包括0和-1。

如果您的应用程序中id是其他类型(例如由服务器提供的字符串UID),则可以将它们设置为标准属性(例如String uid),并使用query查询uid来得到实体。

@Entity
public class User {

    @Id
    private long id;

    @Index
    private String serverUid;

    ...
}

@Index 表示数据库会建立该属性的索引,当频繁查询该属性时会提高性能。

ObjectBox操作实体数据

ObjectBox需要访问你实体属性的数据(例如在生成的Cursor类中)。你有两个选择:

  1. 设置属性作用域为 “package private” (不是 “private”) 。在Kotlin中, 你可以使用@JvmField
  2. 提供标准的 getters。

基本注解

@Entity
public class User {

    @NameInDb("USERNAME")
    private String name;

    @Transient
    private int tempUsageCount;

    ...
}

@NameInDb允许您在数据库级别上为属性自定义一个名称。这允许您重命名Java字段而不影响数据库级别上的属性名称(方便修改类)。 注1:对于重命名,UID是首选。 注2:您目前只能使用内联常量来指定列名。

@Transient表示该属性不会被持久化。

属性索引

使用@Index 表示数据库会建立该属性的索引,当频繁查询该属性时会提高性能。

@Entity
public class User {

    @Id
    private Long id;

    @Index
    private String name;

}

关系

可以在对象之间创建一对多和多对多关系,详情请参阅 关系文档。

代码生成

一旦写好你的实体代码,你可以通过编译你的项目来触发代码生成过程。例如 在Android Studio中使用Build> Make project。

如果在更改实体类后遇到错误,请尝试Rebuild项目,以确保清除原有生成的文件。

原文:http://objectbox.io/documentation/entity-annotations/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值