ORMLite id始终为null(没有id字段)

时间:2016-07-27 14:14:27

标签: java android database orm ormlite

我的生活不能解决这个问题。 所以在我的请求对象中我有

@DatabaseField(id = true, columnName = "ID", canBeNull = false, generatedId = true)
private int entityId;

每当我像这样执行插入方法时:

public void insert(T object) throws SQLException {
    DatabaseConnection connection = objectDao.startThreadConnection();
    Savepoint savepoint = null;
    try {
        savepoint = connection.setSavePoint(null);
        objectDao.createOrUpdate(object);
    } finally {
        connection.commit(savepoint);
        objectDao.endThreadConnection(connection);
    }
}

我总是得到这样的错误

Class class UnsyncTripRequest does not have an id field

我不确定为什么我从我理解的id应该自动创建? 我在OrmLites BaseDaoImpl类中看到有一个extractId方法,它有这一行:

FieldType idField = tableInfo.getIdField();

始终为空。任何人都有任何关于我如何解决这个问题的见解。 感谢

3 个答案:

答案 0 :(得分:1)

  

FieldType idField = tableInfo.getIdField(); ...始终为空。

问题似乎是你的实体,而不是与保存点有关。不知何故,DAO生成的tableInfo与您的实体不匹配。如果您的班级中有entityId字段,那么我怀疑您的ormlite_config.txt文件尚未更新。

答案 1 :(得分:0)

您同时设置了'id = true'和'generatedId = true'属性。你能否删除'id = true',看看会发生什么?

答案 2 :(得分:0)

您正在创建,更新或删除的Dao应该同步。 当您使用

com.j256.ormlite.dao.BaseDaoImpl.createOrUpdate()

ormlite extractId以查看是否可以更新,然后去更新该特定行。

如果有并行线程,则删除具有id的行。

Ormlite引发java.sql.SQLException,说“ 没有ID字段

如果同步操作,Dao可以访问表操作,那么您应该很好。

synchronized (objectDao){
                 objectDao.createOrUpdate(object);
            }