如何使用ormlite将对象嵌套在另一个对象中?

时间:2018-05-26 10:53:15

标签: java android database android-studio ormlite

我尝试保存“BestandItem”,它由“ScanItem”和带有Ormlite的日历组成。在我重新启动我的应用程序后(对于使用Android编写的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和generatedId,因为我认为存在问题。

1 个答案:

答案 0 :(得分:0)

经过一些测试和无数次尝试后,我现在有了一个解决方案。 因为ScanItem中的条形码是唯一的,所以我可以将它用于ID而不是生成的id。 使用现有ID,该程序现在可以使用。