【问题标题】:How to save object nested inside another object with ormlite?如何使用 ormlite 保存嵌套在另一个对象中的对象?
【发布时间】:2018-05-26 10:53:15
【问题描述】:

我尝试保存由“ScanItem”和带有 Ormlite 的日历组成的“BestandItem”。在我重新启动我的应用程序(对于带有 Android Studio 的 Android,我用 Java 编写)后,ScanItem 的内容消失了,但前提是它位于 Bestanditem 内。

这是我的 ScanItem:

@DatabaseTable(tableName = "scanItem")
public class ScanItem{
@DatabaseField (generatedId = true)
private int id;
@DatabaseField
private String barcode;
@DatabaseField
private String name;

public ScanItem(String barcode, String name) {
    this.barcode = barcode;
    this.name = name;
}

public ScanItem(){}


这是我的 BestandItem:

@DatabaseTable (tableName = "bestandItem")
public class BestandItem {
@DatabaseField (generatedId = true)
private int id;
@DatabaseField (foreign = true, foreignAutoCreate = true)
private ScanItem scanItem;
@DatabaseField (dataType = DataType.SERIALIZABLE)
private Calendar ablaufDatum;

public BestandItem() {    }

public BestandItem(ScanItem scanItem, Calendar ablaufDatum) {
    this.scanItem = scanItem;
    this.ablaufDatum = ablaufDatum;
}


我尝试过的一些事情:
- Ormlite Documentation
- First Stackoverflow Answer
- Second Stackoverflow Answer

更多代码见我的github项目:
Github SmartFridge

我的 Ormlite 数据库有一个 UtilConfigClass 和一个始终更新的 config.txt。
我在这里做错了什么?为什么不正确保存 ScanItem?

经过一些检查,我可以说其他方法工作得很好。 (只有在 ScanItem 丢失后,我才得到 NullPointerException)。我的结论是,问题出在 BestandItem 的构造函数上。

我认为我在 generateID 和/或 foreignAutoCreate 方面做错了,但我真的不明白如何正确使用它。 还有foreignAutoRefresh到底是做什么的。

我曾尝试更改 ID 和 generateId,因为我认为问题出在此处。

【问题讨论】:

    标签: java android database android-studio ormlite


    【解决方案1】:

    经过一些测试和无数次尝试,我现在有了一个解决方案。 因为 ScanItem 内部的条形码是唯一的,所以我可以将其用作 ID,而不是生成的 ID。 有了现有的 ID,程序现在就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多