java - 防止在 RealmList 中保存时创建领域对象
问题描述
我有两个模型类,Product 和 StoreTransaction,如下所示
产品.kt
open class Product(
var barcode: String? = null,
var name: String? = null,
var price: Double? = null,
var quantity: Double? = null
) : RealmObject()
StoreTransaction.kt
open class StoreTransaction(
var date: Date? = null,
var productList: RealmList<Product>? = null
// and other variables below
) : RealmObject()
这里我们有 3 个产品,产品 A、B 和 C,每个数量相同,各 5 件
然后我分别购买产品 A 和 C 2 件并像这样保存交易
fun saveTransaction(toBuyList: ArrayList<Product>, realm: Realm) {
val date = Date()
val productList = RealmList<Product>()
productList.addAll(toBuyList.toList())
// other variables
val st = StoreTransaction(date, productList // other vars)
realm.executeTransaction {
realm.copyToRealm(st)
// update stock quantity
toBuyList.forEach { itemToBuy ->
val product = realm.where(Product::class.java)
.equalTo("barcode", itemToBuy.barcode).findFirst()
product?.quantity = product?.quantity?.minus(itemToBuy.quantity!!)
}
}
}
当我查询我的产品时,我得到了以下结果
- 产品 A : 3.0
- 产品 A : 2.0
- 产品 B : 5.0
- 产品 C : 3.0
- 产品 C : 2.0
似乎在 StoreTransaction 类中保存产品 RealmList 会在 Product 类中创建新数据。有没有办法防止这种情况?我试图不显示已售出的产品。
现在我知道我可以在 Product 类中创建一个额外的变量,例如指示产品是否已售出的布尔值,然后对其进行查询。但这是正确的方法吗?
旁注:我目前的解决方案是将 StoreTransaction 中的 productList 属性更改为临时字符串(通过使用 Gson)。它工作得很好,但我很好奇是否有更好的方法来处理这个问题。
解决方案
在条形码上使用 @PrimaryKey 注释
public class TestObj extends RealmObject {
@PrimaryKey
private String code;
}
就像我在 Java 中做的那样基本上对象需要有一个主键来更新数据库中的现有对象
推荐阅读
- python - 来自两个耦合阵列的直方图
- html - 为什么 2 的 50% 宽度不会留在同一行?
- powershell - 我尝试使用 Get-ADComputer、Get-WmiObject 和 Get-windowsfeature 收集不同的信息
- reactjs - 无法从 next.js 中的 serversideprops 检索查询
- javascript - 如何在循环GSAP上从屏幕顶部到底部为文本元素设置动画
- c# - 连接到 SQL 时,变量似乎无法在 c# 上接收值
- apache-spark - 如何获取用 Spark 编写的文件列表?
- node.js - 如何使用 observablehq/plot 解决 TypeScript 声明文件错误
- reactjs - 在反应中将 ref 传递给样式化的组件
- python - np.where() 转换失败