如何在 SugarORM 中设置主键

How to set primary key in SugarORM

我是第一次使用 SugarORM,我有一个简短的问题。 如何将一个实体设置为主键?例如,我需要这样的东西:

public class Student{
    @PrimaryKey
    private String studentId;
    private String name;
}

可能吗? 谢谢。

显然您无法使用 Sugar ORM 执行此操作。他们网站上的文档没有说明任何关于主键的信息,甚至没有这样的注释。您应该考虑切换到我个人推荐的 OrmLite,它与 Android.

一起使用效果很好。

http://ormlite.com/sqlite_java_android_orm.shtml

Sugar 默认添加了一个主自增键字段。它应该可以通过“[student_obj].id”访问。至于创建您自己的自定义名称主键字段,我认为您(目前)还做不到。

无论如何,我的所有名称通常都是 "id",因此无论是自动创建还是我自己添加它们对我来说都没有区别。

目前无法指定主键。但是从 sugar 1.4 开始,可以选择使用 @Unique 属性 (https://github.com/satyan/sugar#sugarrecord):

public class Book extends SugarRecord {
    @Unique
    String isbn;
    String title;
    String edition;
    /*...*/
    public Book(String isbn, String title, String edition) {
        this.isbn = isbn;
        this.title = title;
        this.edition = edition;
    }
}

它不是主键,但在很多情况下它做类似的工作(https://github.com/satyan/sugar#update-entity-based-on-unique-values):

Book book = new Book("isbn123", "Title here", "2nd edition")
book.save();

// Update book with isbn123
Book sameBook = new Book("isbn123", "New Title", "5th edition")
sameBook.update();

book.getId() == sameBook.getId();

Sugar默认是自增的,不过我们还是可以通过下面的代码修改。比如BOOK是table名字,book是对象class的变量,id是主键

book.executeQuery("DELETE FROM " + "BOOK" + " WHERE " +"ID" + " = " + 1 + ";");
book.executeQuery("UPDATE " + "BOOK" + " SET " + "ID" + " = " +"ID" + " -1 " + " WHERE " + "ID" + " > " + 1 + ";");

注意 sugar 将始终根据之前的条目计算密钥。要重置 sqlitesequence,请使用:

book.executeQuery("DELETE FROM SQLITE_SEQUENCE WHERE NAME ='BOOK'");

希望这对某人有所帮助。

我太努力了。

终于,我得到了这个答案码...

Book.deleteAll(Book.class);
book=new Book(user, pass);
book.setId(Long.valueOf(book.listAll(Book.class).size()));
book.save();

此代码的工作方式类似于删除和重新创建 table.and 重置 ID。 important:in 在 android 工作室工作 sugar orm 必须禁用即时 运行。 祝你好运