java - 如何使用 ormlite 保存嵌套在另一个对象中的对象?
问题描述
我尝试保存由“ScanItem”和带有 Ormlite 的日历组成的“BestandItem”。在我重新启动我的应用程序(对于带有 Android Studio 的 Android,我用 Java 编写)后,ScanItem 的内容消失了,但前提是它位于 Bestanditem 内。
这是我的扫描项:
@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 文档
-第一个 Stackoverflow 答案
-第二个 Stackoverflow 答案
更多代码参见我的 github 项目:
Github SmartFridge
我的 Ormlite 数据库有一个 UtilConfigClass 和一个始终更新的 config.txt。
我在这里做错了什么?为什么不正确保存 ScanItem?
经过一些检查,我可以说其他方法工作得很好。(只有在 ScanItem 丢失后,我才得到 NullPointerException)。我的结论是,问题出在 BestandItem 的构造函数上。
我认为我在 generateID 和/或 foreignAutoCreate 上做错了,但我真的不明白如何正确使用它。还有foreignAutoRefresh到底做了什么。
我试图改变 ID 和 generateId ,因为我认为存在问题。
解决方案
经过一些测试和无数次尝试,我现在有了一个解决方案。因为 ScanItem 内部的条形码是唯一的,所以我可以将其用作 ID,而不是生成的 ID。有了现有的 ID,程序现在可以工作了。
推荐阅读
- android - 添加 Barcode_Scan 包后 Flutter 应用程序无法构建
- c - 我删除结构条目的代码没有删除,我不知道为什么
- php - 在 Laravel 中显示类别、子类别和子类别时出错
- wordpress - .htaccess 网站的 WordPress 问题转到示例域
- css - HTML如何增加
- php - Laravel Eloquent Relation 在 ajax 中显示未定义
- javascript - document.querySelector 获取包含括号的类名
- java - 如果条件为真,我正在尝试获取一个按钮以转到下一个活动,但它不起作用
- visual-studio-2013 - 按 LINQ 查询结果分组到 DataGridView
- java - 当我取消订阅 Observable 链时会发生什么?