领域和自动增量行为(安卓)

2022-09-01 14:58:56

我试图使用ID作为参考从 Realm 获取数据。但是,在查询 ID 时,我发现 Realm 为所有元素提供了相同的 ID(ID 为 0)。为什么当我在模型的 ID 上使用注释时,ID 没有自动递增?@PrimaryKey

下面是模型的缩短类:

public class Child_pages extends RealmObject {
    @PrimaryKey
    private int id_cp;

    private int id;
    private String day;
    private int category_id;

我正在执行的查询是:realm.where(Child_pages.class).equalTo("id_cp",page_id).findFirst()


答案 1

Realm 目前不支持自动递增主键。但是,您可以使用以下方法轻松实现它:

public int getNextKey() { 
    try { 
         Number number = realm.where(object).max("id");
         if (number != null) {
             return number.intValue() + 1;
         } else {
             return 0;
         }
    } catch (ArrayIndexOutOfBoundsException e) { 
         return 0;
    }
}

我希望这可以让你开始。


答案 2

Java 绑定尚不支持主键,但它在路线图上,并且具有高优先级 - 请参阅:https://groups.google.com/forum/#!topic/realm-java/6hFqdyoH67w 。作为解决方法,您可以使用这段代码来生成密钥:

int key;
try {
  key = realm.where(Child_pages.class).max("id").intValue() + 1;
} catch(ArrayIndexOutOfBoundsException ex) {
 key = 0;
}

我使用单例工厂来生成主键,作为具有更好性能的更通用的解决方案(由于),无需每次都查询)。max("id")AtomicInteger

如果您需要更多上下文,Realm Git Hub 中有一个很长的讨论:文档如何设置自动增量 id?


推荐