ORMlite没有返回我刚刚保存的对象

时间:2012-07-05 14:08:30

标签: android ormlite

这是我的代码失败(它在一个活动中运行,数据库助手在数据库中创建了WishList对象)

DatabaseHelper helper = DatabaseHelper.getInstance( getActivity() );
int savedID = 0;
WishList wl = new WishList();
wl.setName("abc");
try {
    savedID = helper.getWishListDao().create(wl);
    WishList wl_saved = helper.getWishListDao().queryForId( savedID );
    wl_saved.getId();
} catch (SQLException e) {
    e.printStackTrace();
}

这是我的实体。 ID字段是自动生成的。

@DatabaseTable
public class WishList {
    @DatabaseField(generatedId = true)
    private int id;

    @DatabaseField( canBeNull = false , unique = true )
    private String name;

    @ForeignCollectionField
    private ForeignCollection<WishItem> items;
    ...

错误的是,数据库中生成的ID与ORMlite在下面的调用中返回的ID不同。它返回1.

 savedID = helper.getWishListDao().create(wl);

数据库中的ID实际上是37.任何想法我可能做错了什么? 使用版本4.41

1 个答案:

答案 0 :(得分:22)

ORMLite's Dao.create(...)方法返回新创建的对象的ID但数据库中已更改的行数 - 通常为1.以下是javadocs Dao.create(...)

  

从对象在数据库中创建一个新行。如果正在创建的对象使用DatabaseField.generatedId(),则将修改数据参数并使用数据库中的相应id进行设置。 ...   返回:数据库中更新的行数。这应该是1。

当ORMLite创建对象时,生成的ID随后会设置为id字段。要查找新对象的ID,请从对象本身获取它:

// create returns 1 row changed
helper.getWishListDao().create(wl);
// the id field is set on the w1 object after it was created
savedID = w1.getId();