如何在SugarORM中设置主键

时间:2015-10-04 11:10:21

标签: android primary-key sugarorm

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

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

有可能吗? 谢谢。

5 个答案:

答案 0 :(得分:6)

目前无法指定主键。但从糖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();

答案 1 :(得分:1)

显然你不能用Sugar ORM做到这一点。他们网站上的文档没有说明主键或甚至有这样的注释。您应该考虑切换到我个人推荐的OrmLite,并且知道它可以与Android配合使用。

http://ormlite.com/sqlite_java_android_orm.shtml

答案 2 :(得分:1)

我太努力了。

最后,我得到了这个答案代码......

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

此代码的工作方式类似于删除并重新创建table.and reset id。 重要的是:在Android工作室工作糖必须禁用即时运行。 祝你好运

答案 3 :(得分:0)

Sugar默认添加了主要自动增量键字段。它应该可以通过“[student_obj] .id”访问。至于创建自己的自定义名称主键字段,我认为你不能这样做(还)。

无论如何,我的所有人通常都是名字“id”,所以如果他们是自动创建的,或者我自己添加它们对我没有任何影响。

答案 4 :(得分:0)

默认情况下,Sugar会自动增加,但我们仍然可以使用下面的代码对其进行修改。例如,BOOK是表名,book是对象类的变量,Id是主键。

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

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

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

希望这有助于某人。