4

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

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

是否可以?谢谢你。

4

5 回答 5

7

目前无法指定主键。但从 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();
于 2016-01-22T18:53:27.843 回答
1

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

http://ormlite.com/sqlite_java_android_orm.shtml

于 2015-10-04T11:22:59.643 回答
1

我太努力了。

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

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

此代码的工作方式类似于删除和重新创建 table.and 重置 id。重要:在 android studio 中工作 Sugar orm 必须禁用即时运行。祝你好运

于 2017-06-01T18:10:36.033 回答
0

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

无论如何,我的所有通常都是名称“id”,所以如果它们是自动创建的或者我自己添加它们,对我来说没有什么区别。

于 2015-10-06T18:59:18.250 回答
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'");

希望这可以帮助某人。

于 2017-04-29T03:22:49.627 回答