gpt4 book ai didi

java - SugarORM 中的持久化对象

转载 作者:行者123 更新时间:2023-12-02 03:25:32 25 4
gpt4 key购买 nike

我有一个图书类(class):

public class Book extends SugarRecord {
private String mBookName;
private String mAuthorName;
private List<Page> mPageList;

public Book() {

}

public Book(String bookname, String authorName) {
mBookName = bookname;
mAuthorName = authorName;
mPageList = new ArrayList<>();
}

public String getAuthorName() {
return mAuthorName;
}

public void setAuthorName(String authorName) {
mAuthorName = authorName;
}

public String getBookName() {
return mBookName;
}

public void setBookName(String bookName) {
mBookName = bookName;
}

public void addPage(Page page) {
mPageList.add(page);
}

}

和 Page 类:

public class Page extends SugarRecord {
private String mText;

public Page() {

}
public Page(String text) {
mText = text;
}

public String getText() {
return mText;
}

public void setText(String text) {
mText = text;
}
}

我正在用这个测试它:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Book book = new Book("Some Book Title", "John Doe");

Page page1 = new Page("Once upon a time there was a very lonely bunny who wanted some friends.");
Page page2 = new Page("So he found some friends, and everyone was happy.");
Page page3 = new Page("The end!");

book.addPage(page1);
book.addPage(page2);
book.addPage(page3);

book.save();
}
}

但是它没有按预期工作。它试图使用以下 .schema 使 mPageList 成为自己的列:

CREATE TABLE BOOK ( ID INTEGER PRIMARY KEY AUTOINCREMENT , M_AUTHOR_NAME TEXT, M_BOOK_NAME TEXT, M_PAGE_LIST  );

我真正希望它做的不是将列表视为自己的列,而是将页面保存到页面表中,并附加引用此 Book 类的 id(所以我期望的是类似 ID、BOOK_ID、M_TEXT)。简而言之,通过嵌套子对象级联的持久性操作。

这可以在 SugarORM 中完成吗?

最佳答案

没有 ORM 数据库(SugarORm、DBFLow 等)支持列表列。如您所知,sql 也没有这种数据类型。

这就是您收到此错误的原因。如果你问我如何将列表保存到 ORM。我用的是Gson。

将页面列表声明为字符串。

字符串页面列表;

在将其保存到数据库之前,借助 Gson 库将其转换为 Json 字符串。

Gson gson = new Gson();
String value = gson.toJson(your_page_list);

从数据库检索时,使用 Gson 将 json 字符串转换为 List。

List<Page> page_list;
Type typeIndicatorForGson = new TypeToken<ArrayList<Page>>() {}.getType();
Gson myGson = new Gson();
page_list = myGson.fromJson(page_json_data_from_database, typeIndicatorForGson);

关于java - SugarORM 中的持久化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com