示例#1
0
  private void loadLoadGroups(JDBCEntityMetaData metadata) {
    loadGroupMasks = new HashMap();

    // load optimistic locking mask and add it to all the load group masks
    JDBCOptimisticLockingMetaData olMD = metadata.getOptimisticLocking();
    if (olMD != null) {
      if (versionField != null) {
        defaultLockGroupMask = new boolean[tableFields.length];
        defaultLockGroupMask[versionField.getTableIndex()] = true;
        versionField.setLockingStrategy(LockingStrategy.VERSION);
      } else if (olMD.getGroupName() != null) {
        defaultLockGroupMask = loadGroupMask(olMD.getGroupName(), null);
        for (int i = 0; i < tableFields.length; ++i) {
          if (defaultLockGroupMask[i]) {
            JDBCCMPFieldBridge tableField = tableFields[i];
            tableField.setLockingStrategy(LockingStrategy.GROUP);
            tableField.addDefaultFlag(ADD_TO_WHERE_ON_UPDATE);
          }
        }
      } else { // read or modified strategy
        LockingStrategy strategy =
            (olMD.getLockingStrategy()
                    == JDBCOptimisticLockingMetaData.LockingStrategy.READ_STRATEGY
                ? LockingStrategy.READ
                : LockingStrategy.MODIFIED);
        for (int i = 0; i < tableFields.length; ++i) {
          JDBCCMPFieldBridge field = tableFields[i];
          if (!field.isPrimaryKeyMember()) field.setLockingStrategy(strategy);
        }
      }
    }

    // add the * load group
    boolean[] defaultLoadGroup = new boolean[tableFields.length];
    Arrays.fill(defaultLoadGroup, true);
    for (int i = 0; i < primaryKeyFields.length; ++i) {
      int tableIndex = primaryKeyFields[i].getTableIndex();
      defaultLoadGroup[tableIndex] = false;
    }
    loadGroupMasks.put(DEFAULT_LOADGROUP_NAME, defaultLoadGroup);

    // put each group in the load groups map by group name
    Iterator groupNames = metadata.getLoadGroups().keySet().iterator();
    while (groupNames.hasNext()) {
      // get the group name
      String groupName = (String) groupNames.next();
      boolean[] loadGroup = loadGroupMask(groupName, defaultLockGroupMask);
      loadGroupMasks.put(groupName, loadGroup);
    }
    loadGroupMasks = Collections.unmodifiableMap(loadGroupMasks);
  }