我在 Gson 旁边的 Android 应用程序中使用 ORMLite,目前正在努力解决以下问题。
在我的应用程序中,有多个使用 ORMLite/Gson 的类,为简单起见,我将仅使用两个来描述该问题。
假设我们有一堂课Product
:
@SerializedName("product_id")
@DatabaseTable(tableName = "products")
public class Product {
public Product() {
}
@DatabaseField(id = true)
private int id;
// Generic stuff
@DatabaseField
@SerializedName("product_desc")
private String desc;
@DatabaseField
@SerializedName("in_stock")
private boolean inStock;
@DatabaseField(unique = true)
@SerializedName("product_name")
private String name;
// Issue occurs here
@DatabaseField(foreign = true, foreignAutoRefresh = true)
private Venue venue;
}
我们有一个类“Venue”:
@DatabaseTable(tableName = "venues")
public class Venue {
public Venue() {
}
@SerializedName("venueid")
@DatabaseField(id = true)
private int id;
// Other Generic Junk
@DatabaseField
private String desc;
@DatabaseField
private String email;
@DatabaseField
private String fax;
@DatabaseField
@SerializedName("venue_name")
private String name;
@DatabaseField
private String phoneNumber;
}
我使用 Gson 从预先编写的 API 中反序列化 Json,然后 ORMLite 用这些数据填充数据库。当 API 返回与每个产品关联的场所的场所 IDVenue
(例如场所 ID = 1)而不是对象时,就会出现问题。
但是,数据库中已经填充了这些场所,因此venueid = 1
指的是当前数据库中的真实场所。
问题是让 ORMLite 理解这一点并将其中的Venue
对象更新Product
为 id = 1 的对象!
谁能想到解决方案?
编辑:
为了更好地理解我的问题,这里是一些示例 Json:
[
{
"productid": 1,
"venueid": 4,
"product_name": "Jack Daniels",
"in_stock": true,
"orders_accepted": true,
}
...
]
如您所见,我得到了一个 int 的场地 ID 而不是一个Venue
对象。有没有一种简单的方法可以将其转换为相应的场地,而无需多次查询的大量开销