MoyaDescriptorCustomizer.java 1.41 KB
package fi.codecrew.moya.database;

import java.util.List;

import org.eclipse.persistence.config.DescriptorCustomizer;
import org.eclipse.persistence.descriptors.ChangedFieldsLockingPolicy;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.descriptors.ReturningPolicy;
import org.eclipse.persistence.internal.helper.DatabaseField;

public class MoyaDescriptorCustomizer implements DescriptorCustomizer {

    @Override
    public void customize(ClassDescriptor descriptor) throws Exception {

        // Optimistic locking policy
        ChangedFieldsLockingPolicy changedFieldsLockingPolicy = new ChangedFieldsLockingPolicy();
        descriptor.setOptimisticLockingPolicy(changedFieldsLockingPolicy);

        // Returningpolicy
        ReturningPolicy returningPolicy = new ReturningPolicy();

        List<DatabaseField> pkFields = descriptor.getPrimaryKeyFields();
        for (final DatabaseField field : pkFields) {
            returningPolicy.addFieldForInsertReturnOnly(field);
            field.setUpdatable(false);
            field.setInsertable(false);
        }

        for (final DatabaseField field : descriptor.getFields()) {

            if (pkFields.contains(field))
                continue;

            returningPolicy.addFieldForInsert(field);
            returningPolicy.addFieldForUpdate(field);
        }

        descriptor.setReturningPolicy(returningPolicy);
    }
}