这是我的代码失败(它在一个活动中运行,数据库助手在数据库中创建了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
答案 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();