我的生活不能解决这个问题。 所以在我的请求对象中我有
@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();
始终为空。任何人都有任何关于我如何解决这个问题的见解。 感谢
答案 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);
}