{"record":{"id":"62ae9767e9caee26","repo":"greenrobot/greenDAO","slug":"no-dao-registered-for-entityclass","errorCode":null,"errorMessage":"No DAO registered for ${entityClass}","messagePattern":"No DAO registered for (.+?)","errorType":"exception","errorClass":"DaoException","httpStatus":null,"severity":"error","filePath":"DaoCore/src/main/java/org/greenrobot/greendao/AbstractDaoSession.java","lineNumber":141,"sourceCode":"\n    /** Convenient call for {@link AbstractDao#queryRaw(String, String...)}. */\n    public <T, K> List<T> queryRaw(Class<T> entityClass, String where, String... selectionArgs) {\n        @SuppressWarnings(\"unchecked\")\n        AbstractDao<T, K> dao = (AbstractDao<T, K>) getDao(entityClass);\n        return dao.queryRaw(where, selectionArgs);\n    }\n\n    /** Convenient call for {@link AbstractDao#queryBuilder()}. */\n    public <T> QueryBuilder<T> queryBuilder(Class<T> entityClass) {\n        @SuppressWarnings(\"unchecked\")\n        AbstractDao<T, ?> dao = (AbstractDao<T, ?>) getDao(entityClass);\n        return dao.queryBuilder();\n    }\n\n    public AbstractDao<?, ?> getDao(Class<? extends Object> entityClass) {\n        AbstractDao<?, ?> dao = entityToDao.get(entityClass);\n        if (dao == null) {\n            throw new DaoException(\"No DAO registered for \" + entityClass);\n        }\n        return dao;\n    }\n\n    /**\n     * Run the given Runnable inside a database transaction. If you except a result, consider callInTx.\n     */\n    public void runInTx(Runnable runnable) {\n        db.beginTransaction();\n        try {\n            runnable.run();\n            db.setTransactionSuccessful();\n        } finally {\n            db.endTransaction();\n        }\n    }\n\n    /**","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/greenrobot/greenDAO/blob/0bbb338e17c4cf28aba5aae62d42f73f50186157/DaoCore/src/main/java/org/greenrobot/greendao/AbstractDaoSession.java#L123-L159","documentation":"AbstractDaoSession keeps a registry (entityToDao) of entity classes to DAO instances. getDao(entityClass) throws DaoException when the class is not registered — i.e., the session was not built with a DAO for that entity, or a different Class object/subtype was passed.","triggerScenarios":"Calling session.getDao(SomeEntity.class) for an entity not added to the schema/master generating the session; passing a subclass of a registered entity class; calling queryBuilder()/dao conveniences via a session lacking the DAO registration.","commonSituations":"Adding a new entity to the schema but regenerating only the DAO class, not the DaoSession/DaoMaster; mixing generated classes from two schema versions; querying with a subclass class literal.","solutions":["Regenerate DaoSession/DaoMaster (greenDAO Gradle plugin/generator) so the new entity's DAO is registered in the constructor's dao registration list.","Use the exact registered entity class (not a subclass) in getDao().","Ensure the app uses the generated DaoSession (new DaoMaster(db).newSession()) rather than a hand-built one.","Verify there is only one schema definition/generation output on the classpath (no stale generated files)."],"exampleFix":"// before (subclass)\nDao dao = session.getDao(AdminUser.class); // AdminUser extends User -> not registered\n// after\nDao dao = session.getDao(User.class); // exact registered entity class","handlingStrategy":"validation","validationCode":"if (!session.getRegisteredDaos().containsKey(entityClass)) {\n    throw new IllegalStateException(\"Entity not in schema: \" + entityClass);\n}","typeGuard":"boolean isRegistered(AbstractDaoSession s, Class<?> c) { return s.getDao(c) != null; }\n// or wrap: try { s.getDao(c); return true; } catch (DaoException e) { return false; }","tryCatchPattern":"try {\n    AbstractDao<?, ?> dao = session.getDao(EntityClass.class);\n} catch (DaoException e) {\n    if (e.getMessage().startsWith(\"No DAO registered for\")) {\n        // regenerate DaoSession or pass the correct entity class\n    } else throw e;\n}","preventionTips":["Regenerate DaoSession/DaoMaster after every schema change.","Always pass the exact registered entity class, never subclasses.","Build sessions only from the generated DaoMaster (new DaoMaster(db).newSession()).","Avoid duplicate/stale generated sources on the classpath."],"tags":["database","greendao","dao-session","code-generation"],"backgroundTag":"resource-not-found","analyzedSha":"0bbb338e17c4cf28aba5aae62d42f73f50186157","analyzedAt":"2026-09-08T03:22:36.050Z","contentChangedAt":"2026-09-08T03:22:36.050Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}