private void doClasses(Session hSession) throws HibernateException {
    MetadataTable tClass = getMetadataTable(MetadataTable.CLASS);

    Iterator i = mResources.values().iterator();
    while (i.hasNext()) {
      Resource resource = (Resource) i.next();
      Set hClasses = new HashSet();
      List classes = tClass.getDataRows(resource.getPath());
      Iterator j = classes.iterator();
      while (j.hasNext()) {
        Metadata md = (Metadata) j.next();
        MClass hClass = new MClass();

        hClass.setResource(resource);
        String className = md.getAttribute("ClassName");
        hClass.setClassName(className);
        hClass.setStandardName(ClassStandardNameEnum.fromString(md.getAttribute("StandardName")));
        hClass.setVisibleName(md.getAttribute("VisibleName"));
        hClass.setDescription(md.getAttribute("Description"));

        StringBuffer tmp = new StringBuffer("rets_");
        tmp.append(resource.getResourceID()).append("_");
        tmp.append(hClass.getClassName());
        hClass.setDbTable(tmp.toString());

        hClass.updateLevel();

        hSession.save(hClass);
        hClasses.add(hClass);
        mClasses.put(hClass.getPath(), hClass);
      }

      resource.setClasses(hClasses);
      hSession.saveOrUpdate(resource);
    }
  }