Android ormlite foregin对象无法保存

时间:2017-02-15 11:26:21

标签: android sql ormlite

我从Json检索数据,使用Gson反序列化并使用ORMLite保存到数据库中。查询外来对象后,结果为0。

我通过API(网络)获取数据:

[{
    "id": 4,
    "name": "California",
    "desc": "",
    "coords": {
        "lat": 37.755363,
        "lon": -122.478676
    }
}, {
    "id": 12,
    "name": "Texas",
    "desc": "asd",
    "coords": {
        "lat": 29.739861,
        "lon": -95.395660
    }
}]

使用Gson构建对象:

List<Location> locations = new Gson().fromJson(szData, Location.class);

我已经使用Android Studio调试检查过,对象已成功创建。

将位置保存到数据库中:

Dao<Location, Long> dao = dbHelper.getDaoLocation();
long entries = dao.create(locations);

对象已成功保存到数据库中。

通过ORMLite获取数据库中的位置:

List<Location> locations = daoLocation.queryBuilder().query();

正如预期的那样,我从数据库中获取结果。但是,位置坐标为空。这是因为我没有在dao.refresh()对象上调用Coordinate

模特:

@DatabaseTable(tableName = "Locations")
public class Location {
   @DatabaseField(columnName = "id", generatedId = true)
   private transient long id;

   @DatabaseField(columnName = "server_id")
   @SerializedName("id")
   private long serverId;

   private String name;
   private String desc;

   @DatabaseField(foreign = true)
   private Coordinate coords;

   // Getters and setters
}

@DatabaseTable(tableName = "Coordinates")
public class Coordinate {
   @DatabaseField(generatedId = true)
   private long id;

   @SerializedName("lat")
   private double latitude;
   @SerializedName("lon")
   private double longitude;

   // Getters and setters
}

如您所见,我没有从坐标中引用位置对象。

如果我查询坐标表(用于调试目的),我得到0结果。

Dao<Coordinate, Long> dao = dbHelper.getDaoCoordinate();
QueryBuilder<Coordinate, Long> qb = dao.queryBuilder();
List<Coordinate> coordinates = qb.query();

以上查询给出了0结果。我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是由类的名称和外来对象的名称引起的。

我更改了外来对象的名称以匹配表名:

地点类(相同)

@DatabaseField(foreign = true)
private Coordinate coords;

协调班级(新)

@DatabaseTable(tableName = "coords")
public class Coordinate {