如何使用 ormlite 保存嵌套在另一个对象中的对象?
How to save object nested inside another object with ormlite?
我尝试保存 "BestandItem",它由 "ScanItem" 和带有 Ormlite 的日历组成。在我重新启动我的应用程序后(对于 Android 和 Android Studio,我用 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 Whosebug Answer
- Second Whosebug Answer
有关更多代码,请参阅我的 github 项目:
Github SmartFridge
我的 Ormlite 数据库有一个 UtilConfigClass 并且总是更新 config.txt。
我在这里做错了什么?为什么不正确保存 ScanItem?
经过一些检查,我可以说其他方法工作得很好。 (仅在丢失 ScanItem 之后,我得到 NullPointerException)。我的结论是,问题出在 BestandItem 的构造函数上。
我想我对 generatedID and/or foreignAutoCreate 做错了什么,但我真的不明白如何正确使用它。
还有 foreignAutoRefresh 到底做了什么。
我已经尝试更改 ID 和 generatedId,因为我认为这是问题所在。
经过一些测试和无数次尝试,我现在有了一个解决方案。
因为 ScanItem 中的条形码是唯一的,所以我可以将它用作 ID,而不是生成的 ID。
使用现有 ID,该程序现在可以运行了。
我尝试保存 "BestandItem",它由 "ScanItem" 和带有 Ormlite 的日历组成。在我重新启动我的应用程序后(对于 Android 和 Android Studio,我用 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 Whosebug Answer
- Second Whosebug Answer
有关更多代码,请参阅我的 github 项目:
Github SmartFridge
我的 Ormlite 数据库有一个 UtilConfigClass 并且总是更新 config.txt。
我在这里做错了什么?为什么不正确保存 ScanItem?
经过一些检查,我可以说其他方法工作得很好。 (仅在丢失 ScanItem 之后,我得到 NullPointerException)。我的结论是,问题出在 BestandItem 的构造函数上。
我想我对 generatedID and/or foreignAutoCreate 做错了什么,但我真的不明白如何正确使用它。 还有 foreignAutoRefresh 到底做了什么。
我已经尝试更改 ID 和 generatedId,因为我认为这是问题所在。
经过一些测试和无数次尝试,我现在有了一个解决方案。 因为 ScanItem 中的条形码是唯一的,所以我可以将它用作 ID,而不是生成的 ID。 使用现有 ID,该程序现在可以运行了。