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); }