Cyclic dependency when recruiting employees and settings in a department

I have tables "department" and "employee" and I created a class object for both.

 UserTable 
    userId userName departmentId
    1        abc      2 
    2        xyz      1


 Department table
  departmentId depName   depHeadId
   1           R&D        2  
   2           IT         1

    public List<User> getAllUsers(){
        List<User> mUserList= null;
        // mDbHelper=DBHelper.getDBHelperInstance(mContext);
        if(mDbHelper==null){
            // todo: handle this case
            return null;

        }
        mUserList=new ArrayList<>();
        Cursor mCursor=null;
        SQLiteDatabase mReadableDB= mDbHelper.getReadableDatabase();
        try{
            mCursor=mReadableDB.rawQuery("SELECT * FROM User",null);
            if(mCursor==null){
                return null;
            }
            if(mCursor.moveToFirst()) {
                do {
                    User user= new User();
                    user.setUserId(mCursor.getInt(mCursor.getColumnIndex("userId")));
                    user.setUserName(mCursor.getString(mCursor.getColumnIndex("userName")));

                    Department department= getDepartmentOfUser(mCursor.getInt(mCursor.getColumnIndex("departmentId")));
                    user.setDepartment(department);

                    if(department==null){
                        //Todo: handled this case
                        return null;
                    }
                    mUserList.add(user)

                } while (mCursor.moveToNext());
            }

        }catch (SQLiteException e){
            // ToDO: Add Exception to log file

        }finally {
            if(mCursor!=null){
                mCursor.close();
            }

        }

        return mUserList;
    }


   public Department getDepartment(int departmentId) {
      //  mDbHelper=DBHelper.getDBHelperInstance(mContext);
        Department department=null;
        if(mDbHelper==null){
            // need to log about the condition
            return null;

        }
        Cursor mCursor=null;
        SQLiteDatabase mReadableDB= mDbHelper.getReadableDatabase();
        try{
            mCursor=mReadableDB.rawQuery("SELECT * FROM DepartmentMaster where departmentId=?",new String[]{String.valueOf(departmentId)});
            if(mCursor==null){
                // need to log about the condition
                return null;
            }

            if(mCursor.moveToFirst()){
                department=new Department();
                department.setId(departmentId);
                department.setName(mCursor.getString(mCursor.getColumnIndex("depName")));
                department.setDepartMentHead(getUser(mCursor.getInt(mCursor.getColumnIndex("depHeadId"))));
            }


        }catch (SQLiteException e){
            // ToDO: Add Exception to log file

        }finally {
            if(mCursor!=null){
                mCursor.close();
            }

        }

        return department;
   }

      

I need to call getUser (userId) again. Now I am just stuck and its a circular dependency between department and user. Can anyone help me fix the class design or db design to get my required data easily.

+3


source to share





All Articles