/** * PUBLIC: * Set the locking policy a changed fields locking policy. * A field locking policy is base on locking on all changed fields by comparing with their previous values to detect field-level collisions. * Note: the unit of work must be used for all updates when using field locking. * @see ChangedFieldsLockingPolicy */ public void useChangedFieldsLocking() { setOptimisticLockingPolicy(new ChangedFieldsLockingPolicy()); }
/** * INTERNAL: * Returns the fields that should be compared in the where clause. * In this case, it is only the fields that were changed. */ protected Vector getFieldsToCompare(DatabaseTable table, AbstractRecord transRow, AbstractRecord modifyRow) { Vector fields = getAllNonPrimaryKeyFields(table); Vector returnedFields = new Vector(); for (Enumeration enumtr = fields.elements(); enumtr.hasMoreElements();) { DatabaseField field = (DatabaseField)enumtr.nextElement(); if (modifyRow.containsKey(field)) { returnedFields.addElement(field); } } return returnedFields; } }
/** * INTERNAL: * Values to be included in the locking mechanism are added to the translation row. * For changed fields the normal build row is ok as only changed fields matter. */ public void addLockValuesToTranslationRow(ObjectLevelModifyQuery query) { verifyUsage(query.getSession()); Object object; if (query.isDeleteObjectQuery()) { return; } object = query.getBackupClone(); for (Enumeration enumtr = query.getModifyRow().keys(); enumtr.hasMoreElements();) { DatabaseField field = (DatabaseField)enumtr.nextElement(); DatabaseMapping mapping = descriptor.getObjectBuilder().getMappingForField(field); mapping.writeFromObjectIntoRow(object, query.getTranslationRow(), query.getSession()); } }
/** * INTERNAL: * Values to be included in the locking mechanism are added to the translation row. * For changed fields the normal build row is ok as only changed fields matter. */ @Override public void addLockValuesToTranslationRow(ObjectLevelModifyQuery query) { verifyUsage(query.getSession()); Object object; if (query.isDeleteObjectQuery()) { return; } object = query.getBackupClone(); // EL bug 319759 if (query.isUpdateObjectQuery()) { query.setShouldValidateUpdateCallCacheUse(true); } for (Enumeration enumtr = query.getModifyRow().keys(); enumtr.hasMoreElements();) { DatabaseField field = (DatabaseField)enumtr.nextElement(); DatabaseMapping mapping = descriptor.getObjectBuilder().getMappingForField(field); mapping.writeFromObjectIntoRow(object, query.getTranslationRow(), query.getSession(), WriteType.UNDEFINED); } }
/** * PUBLIC: * Set the locking policy a changed fields locking policy. * A field locking policy is base on locking on all changed fields by comparing with their previous values to detect field-level collisions. * Note: the unit of work must be used for all updates when using field locking. * @see ChangedFieldsLockingPolicy */ public void useChangedFieldsLocking() { setOptimisticLockingPolicy(new ChangedFieldsLockingPolicy()); }
/** * INTERNAL: * Returns the fields that should be compared in the where clause. * In this case, it is only the fields that were changed. */ @Override protected List<DatabaseField> getFieldsToCompare(DatabaseTable table, AbstractRecord transRow, AbstractRecord modifyRow) { List<DatabaseField> fields = getAllNonPrimaryKeyFields(table); List<DatabaseField> returnedFields = new ArrayList<DatabaseField>(); for (DatabaseField field : fields) { if (modifyRow.containsKey(field)) { returnedFields.add(field); } } return returnedFields; } }
/** * INTERNAL: * Values to be included in the locking mechanism are added to the translation row. * For changed fields the normal build row is ok as only changed fields matter. */ @Override public void addLockValuesToTranslationRow(ObjectLevelModifyQuery query) { verifyUsage(query.getSession()); Object object; if (query.isDeleteObjectQuery()) { return; } object = query.getBackupClone(); // EL bug 319759 if (query.isUpdateObjectQuery()) { query.setShouldValidateUpdateCallCacheUse(true); } for (Enumeration enumtr = query.getModifyRow().keys(); enumtr.hasMoreElements();) { DatabaseField field = (DatabaseField)enumtr.nextElement(); DatabaseMapping mapping = descriptor.getObjectBuilder().getMappingForField(field); mapping.writeFromObjectIntoRow(object, query.getTranslationRow(), query.getSession(), WriteType.UNDEFINED); } }
/** * PUBLIC: * Set the locking policy a changed fields locking policy. * A field locking policy is base on locking on all changed fields by comparing with their previous values to detect field-level collisions. * Note: the unit of work must be used for all updates when using field locking. * @see ChangedFieldsLockingPolicy */ public void useChangedFieldsLocking() { setOptimisticLockingPolicy(new ChangedFieldsLockingPolicy()); }
/** * INTERNAL: * Returns the fields that should be compared in the where clause. * In this case, it is only the fields that were changed. */ @Override protected List<DatabaseField> getFieldsToCompare(DatabaseTable table, AbstractRecord transRow, AbstractRecord modifyRow) { List<DatabaseField> fields = getAllNonPrimaryKeyFields(table); List<DatabaseField> returnedFields = new ArrayList<DatabaseField>(); for (DatabaseField field : fields) { if (modifyRow.containsKey(field)) { returnedFields.add(field); } } return returnedFields; } }
descriptor.setOptimisticLockingPolicy(new AllFieldsLockingPolicy()); } else if (m_type.equals(OptimisticLockingType.CHANGED_COLUMNS.name())) { descriptor.setOptimisticLockingPolicy(new ChangedFieldsLockingPolicy()); } else if (m_type.equals(OptimisticLockingType.SELECTED_COLUMNS.name())) { if (m_selectedColumns.isEmpty()) {