我第一次使用SugarORM,我有一个简单的问题。 如何将一个实体设置为主键?例如,我需要这样的东西:
public class Student{
@PrimaryKey
private String studentId;
private String name;
}
有可能吗? 谢谢。
答案 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配合使用。
答案 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'");
希望这有助于某人。