SugarORM 中的持久化对象

2024-04-25

我有一个图书课:

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);
    }

}

和页面类:

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();
    }
}

但是它没有按预期工作。它正在努力使mPageList它自己的专栏与这个.schema:

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

我真正希望它做的不是将列表视为自己的列,而是将页面保存到 PAGE 表中,并使用引用此 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); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SugarORM 中的持久化对象 的相关文章

随机推荐