我是第一次使用 SugarORM,我有一个简短的问题。如何将一个实体设置为主键?例如,我需要这样的东西:
public class Student{
@PrimaryKey
private String studentId;
private String name;
}
是否可以?谢谢你。
我是第一次使用 SugarORM,我有一个简短的问题。如何将一个实体设置为主键?例如,我需要这样的东西:
public class Student{
@PrimaryKey
private String studentId;
private String name;
}
是否可以?谢谢你。
目前无法指定主键。但从 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 ORM 做到这一点。他们网站上的文档没有说明主键,甚至没有这样的注释。您应该考虑切换到我个人推荐的 OrmLite,它可以很好地与 Android 配合使用。
我太努力了。
最后,我得到了这个答案代码......
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 必须禁用即时运行。祝你好运
Sugar 默认添加了一个主要的自动增量键字段。它应该可以通过“[student_obj].id”访问就创建您自己的自定义名称主键字段而言,我认为您还不能这样做。
无论如何,我的所有通常都是名称“id”,所以如果它们是自动创建的或者我自己添加它们,对我来说没有什么区别。
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'");
希望这可以帮助某人。