200679 - defaultLength, defaultScale, defaultPrecision added to IColumn in an effort to improve performance
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/core.ecore b/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
index eaf0f0e..9f78292 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
+++ b/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
@@ -231,10 +231,21 @@
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="IColumn" abstract="true" interface="true"
         eSuperTypes="#//mappings/IAbstractColumn">
+      <eOperations name="getDefaultLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
       <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
-          defaultValueLiteral="255"/>
-      <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="IColumnMapping" abstract="true" interface="true">
       <eOperations name="getColumn" eType="#//mappings/IColumn"/>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel b/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
index 13b24dc..2298138 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
+++ b/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
@@ -225,8 +225,14 @@
       </genClasses>
       <genClasses ecoreClass="core.ecore#//mappings/IColumn">
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/length"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedLength"/>
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/precision"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedPrecision"/>
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/scale"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedScale"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultLength"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultPrecision"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultScale"/>
       </genClasses>
       <genClasses ecoreClass="core.ecore#//mappings/IColumnMapping">
         <genOperations ecoreOperation="core.ecore#//mappings/IColumnMapping/getColumn"/>
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
index ff5db48..8a14e5c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
@@ -142,7 +142,7 @@
 	 * This is set to false when that job is completed 
 	 */
 	boolean resynching = false;
-	
+
 	/**
 	 * Flag to indicate that the disposing job has been scheduled or is running
 	 * (or has been run, in some cases)
@@ -577,10 +577,9 @@
 	 * Dispose and remove project
 	 */
 	void dispose() {
-		if (disposing) return;
-		
+		if (disposing)
+			return;
 		disposing = true;
-				
 		Job job = new Job("Disposing JPA project ...") {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
@@ -591,7 +590,7 @@
 		job.setRule(project);
 		job.schedule();
 	}
-	
+
 	private void dispose_() {
 		Job.getJobManager().removeJobChangeListener(resynchJobListener);
 		for (IJpaFile jpaFile : new ArrayList<IJpaFile>(getFiles())) {
@@ -678,9 +677,9 @@
 	//passing it on to the JpaModel.  We don't currently support
 	//multiple projects having cross-references
 	public void resynch() {
-		if (disposing) return;
-		
-		if (! resynching) {
+		if (disposing)
+			return;
+		if (!resynching) {
 			this.resynching = true;
 			this.needsToResynch = false;
 			this.resynchJob.schedule();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
index 6fd3bdb..1015c95 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
@@ -42,17 +42,27 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static final int LENGTH_EDEFAULT = 255;
+	protected static final int LENGTH_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getLength() <em>Length</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getLength()
+	 * @see #getSpecifiedLength()
 	 * @generated
 	 * @ordered
 	 */
-	protected int length = LENGTH_EDEFAULT;
+	protected static final int SPECIFIED_LENGTH_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedLength = SPECIFIED_LENGTH_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
@@ -65,14 +75,24 @@
 	protected static final int PRECISION_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getPrecision()
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 * @ordered
 	 */
-	protected int precision = PRECISION_EDEFAULT;
+	protected static final int SPECIFIED_PRECISION_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedPrecision = SPECIFIED_PRECISION_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
@@ -85,14 +105,24 @@
 	protected static final int SCALE_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getScale()
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 * @ordered
 	 */
-	protected int scale = SCALE_EDEFAULT;
+	protected static final int SPECIFIED_SCALE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedScale = SPECIFIED_SCALE_EDEFAULT;
 
 	private final IntAnnotationElementAdapter lengthAdapter;
 
@@ -178,104 +208,130 @@
 		return JpaJavaMappingsPackage.Literals.JAVA_COLUMN;
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Length()
-	 * @model default="255"
-	 * @generated
-	 */
 	public int getLength() {
-		return length;
+		return (this.getSpecifiedLength() == SPECIFIED_LENGTH_EDEFAULT) ? getDefaultLength() : this.getSpecifiedLength();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getLength <em>Length</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
-	 * @generated
-	 */
-	public void setLength(int newLength) {
-		int oldLength = length;
-		length = newLength;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH, oldLength, length));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Precision</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Precision()
-	 * @model
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
+	public int getSpecifiedLength() {
+		return specifiedLength;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	public void setSpecifiedLength(int newSpecifiedLength) {
+		int oldSpecifiedLength = specifiedLength;
+		specifiedLength = newSpecifiedLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH, oldSpecifiedLength, specifiedLength));
+	}
+
 	public int getPrecision() {
-		return precision;
+		return (this.getSpecifiedPrecision() == SPECIFIED_PRECISION_EDEFAULT) ? getDefaultPrecision() : this.getSpecifiedPrecision();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getPrecision <em>Precision</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
-	 * @generated
-	 */
-	public void setPrecision(int newPrecision) {
-		int oldPrecision = precision;
-		precision = newPrecision;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION, oldPrecision, precision));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Scale</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Scale()
-	 * @model
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public int getScale() {
-		return scale;
+	public int getSpecifiedPrecision() {
+		return specifiedPrecision;
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getScale <em>Scale</em>}' attribute.
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 */
-	public void setScale(int newScale) {
-		int oldScale = scale;
-		scale = newScale;
+	public void setSpecifiedPrecision(int newSpecifiedPrecision) {
+		int oldSpecifiedPrecision = specifiedPrecision;
+		specifiedPrecision = newSpecifiedPrecision;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SCALE, oldScale, scale));
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION, oldSpecifiedPrecision, specifiedPrecision));
+	}
+
+	public int getScale() {
+		return (this.getSpecifiedScale() == SPECIFIED_SCALE_EDEFAULT) ? getDefaultScale() : this.getSpecifiedScale();
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
+	 * @generated
+	 */
+	public int getSpecifiedScale() {
+		return specifiedScale;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 */
+	public void setSpecifiedScale(int newSpecifiedScale) {
+		int oldSpecifiedScale = specifiedScale;
+		specifiedScale = newSpecifiedScale;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE, oldSpecifiedScale, specifiedScale));
+	}
+
+	public int getDefaultLength() {
+		return DEFAULT_LENGTH;
+	}
+
+	public int getDefaultPrecision() {
+		return DEFAULT_PRECISION;
+	}
+
+	public int getDefaultScale() {
+		return DEFAULT_SCALE;
 	}
 
 	/**
@@ -288,10 +344,16 @@
 		switch (featureID) {
 			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
 				return new Integer(getLength());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				return new Integer(getSpecifiedLength());
 			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
 				return new Integer(getPrecision());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				return new Integer(getSpecifiedPrecision());
 			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
 				return new Integer(getScale());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				return new Integer(getSpecifiedScale());
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -304,14 +366,14 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				setLength(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(((Integer) newValue).intValue());
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				setPrecision(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(((Integer) newValue).intValue());
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				setScale(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(((Integer) newValue).intValue());
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -325,14 +387,14 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				setLength(LENGTH_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(SPECIFIED_LENGTH_EDEFAULT);
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				setPrecision(PRECISION_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(SPECIFIED_PRECISION_EDEFAULT);
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				setScale(SCALE_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(SPECIFIED_SCALE_EDEFAULT);
 				return;
 		}
 		super.eUnset(featureID);
@@ -347,11 +409,17 @@
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				return length != LENGTH_EDEFAULT;
+				return getLength() != LENGTH_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				return specifiedLength != SPECIFIED_LENGTH_EDEFAULT;
 			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				return precision != PRECISION_EDEFAULT;
+				return getPrecision() != PRECISION_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				return specifiedPrecision != SPECIFIED_PRECISION_EDEFAULT;
 			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				return scale != SCALE_EDEFAULT;
+				return getScale() != SCALE_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				return specifiedScale != SPECIFIED_SCALE_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -367,10 +435,16 @@
 			switch (derivedFeatureID) {
 				case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
 					return JpaCoreMappingsPackage.ICOLUMN__LENGTH;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH;
 				case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
 					return JpaCoreMappingsPackage.ICOLUMN__PRECISION;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION;
 				case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
 					return JpaCoreMappingsPackage.ICOLUMN__SCALE;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -389,10 +463,16 @@
 			switch (baseFeatureID) {
 				case JpaCoreMappingsPackage.ICOLUMN__LENGTH :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH;
 				case JpaCoreMappingsPackage.ICOLUMN__PRECISION :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION;
 				case JpaCoreMappingsPackage.ICOLUMN__SCALE :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__SCALE;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -410,12 +490,12 @@
 		if (eIsProxy())
 			return super.toString();
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (length: ");
-		result.append(length);
-		result.append(", precision: ");
-		result.append(precision);
-		result.append(", scale: ");
-		result.append(scale);
+		result.append(" (specifiedLength: ");
+		result.append(specifiedLength);
+		result.append(", specifiedPrecision: ");
+		result.append(specifiedPrecision);
+		result.append(", specifiedScale: ");
+		result.append(specifiedScale);
 		result.append(')');
 		return result.toString();
 	}
@@ -428,9 +508,9 @@
 	@Override
 	public void updateFromJava(CompilationUnit astRoot) {
 		super.updateFromJava(astRoot);
-		this.setLength(this.lengthAdapter.getValue(astRoot));
-		this.setPrecision(this.precisionAdapter.getValue(astRoot));
-		this.setScale(this.scaleAdapter.getValue(astRoot));
+		this.setSpecifiedLength(this.lengthAdapter.getValue(astRoot));
+		this.setSpecifiedPrecision(this.precisionAdapter.getValue(astRoot));
+		this.setSpecifiedScale(this.scaleAdapter.getValue(astRoot));
 	}
 
 	public void refreshDefaults(DefaultsContext defaultsContext) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
index abfb4c3..3702360 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
@@ -10,7 +10,6 @@
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
 import java.util.Iterator;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
index 1b16973..d588917 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
@@ -10,7 +10,6 @@
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
 import java.util.Iterator;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
index ceee378..ffefd89 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
@@ -12,7 +12,6 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
index 2c425e8..51ec6ee 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
@@ -103,7 +103,6 @@
 		return new ConversionDeclarationAnnotationElementAdapter<String[]>(annotationAdapter, elementName, false, converter);
 	}
 
-
 	@Override
 	protected void notifyChanged(Notification notification) {
 		super.notifyChanged(notification);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
index da4c646..d5061b2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
@@ -2391,13 +2391,31 @@
 	public static final int JAVA_COLUMN__LENGTH = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_LENGTH = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN__PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 1;
+	public static final int JAVA_COLUMN__PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -2406,7 +2424,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN__SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 2;
+	public static final int JAVA_COLUMN__SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The number of structural features of the '<em>Java Column</em>' class.
@@ -2415,7 +2442,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN_FEATURE_COUNT = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 3;
+	public static final int JAVA_COLUMN_FEATURE_COUNT = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
index 6494a6e..10e5d2d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
@@ -3582,13 +3582,31 @@
 	public static final int XML_COLUMN__LENGTH = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_LENGTH = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 1;
+	public static final int XML_COLUMN__PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -3597,7 +3615,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 2;
+	public static final int XML_COLUMN__SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The feature id for the '<em><b>Length For Xml</b></em>' attribute.
@@ -3606,7 +3633,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__LENGTH_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 3;
+	public static final int XML_COLUMN__LENGTH_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The feature id for the '<em><b>Precision For Xml</b></em>' attribute.
@@ -3615,7 +3642,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__PRECISION_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 4;
+	public static final int XML_COLUMN__PRECISION_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 7;
 
 	/**
 	 * The feature id for the '<em><b>Scale For Xml</b></em>' attribute.
@@ -3624,7 +3651,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__SCALE_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 5;
+	public static final int XML_COLUMN__SCALE_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 8;
 
 	/**
 	 * The number of structural features of the '<em>Xml Column</em>' class.
@@ -3633,7 +3660,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN_FEATURE_COUNT = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 6;
+	public static final int XML_COLUMN_FEATURE_COUNT = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 9;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.orm.XmlJoinColumn <em>Xml Join Column</em>}' class.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
index 009f658..fae6f91 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
@@ -47,17 +47,27 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static final int LENGTH_EDEFAULT = 255;
+	protected static final int LENGTH_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getLength() <em>Length</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getLength()
+	 * @see #getSpecifiedLength()
 	 * @generated
 	 * @ordered
 	 */
-	protected int length = LENGTH_EDEFAULT;
+	protected static final int SPECIFIED_LENGTH_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedLength = SPECIFIED_LENGTH_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
@@ -70,14 +80,24 @@
 	protected static final int PRECISION_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getPrecision()
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 * @ordered
 	 */
-	protected int precision = PRECISION_EDEFAULT;
+	protected static final int SPECIFIED_PRECISION_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedPrecision = SPECIFIED_PRECISION_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
@@ -90,14 +110,24 @@
 	protected static final int SCALE_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getScale()
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 * @ordered
 	 */
-	protected int scale = SCALE_EDEFAULT;
+	protected static final int SPECIFIED_SCALE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedScale = SPECIFIED_SCALE_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getLengthForXml() <em>Length For Xml</em>}' attribute.
@@ -152,134 +182,148 @@
 		return OrmPackage.Literals.XML_COLUMN;
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Length()
-	 * @model default="255"
-	 * @generated
-	 */
 	public int getLength() {
-		return length;
+		return (this.getSpecifiedLength() == SPECIFIED_LENGTH_EDEFAULT) ? getDefaultLength() : this.getSpecifiedLength();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getLength <em>Length</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public void setLengthGen(int newLength) {
-		int oldLength = length;
-		length = newLength;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__LENGTH, oldLength, length));
+	public int getSpecifiedLength() {
+		return specifiedLength;
 	}
 
-	public void setLength(int newLength) {
-		setLengthGen(newLength);
-		if (newLength != LENGTH_EDEFAULT) {
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	public void setSpecifiedLengthGen(int newSpecifiedLength) {
+		int oldSpecifiedLength = specifiedLength;
+		specifiedLength = newSpecifiedLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_LENGTH, oldSpecifiedLength, specifiedLength));
+	}
+
+	public void setSpecifiedLength(int newSpecifiedLength) {
+		setSpecifiedLengthGen(newSpecifiedLength);
+		if (newSpecifiedLength != LENGTH_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setLengthForXml(newLength);
+		setLengthForXml(newSpecifiedLength);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Precision</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Precision()
-	 * @model
-	 * @generated
-	 */
 	public int getPrecision() {
-		return precision;
+		return (this.getSpecifiedPrecision() == SPECIFIED_PRECISION_EDEFAULT) ? getDefaultPrecision() : this.getSpecifiedPrecision();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getPrecision <em>Precision</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public void setPrecisionGen(int newPrecision) {
-		int oldPrecision = precision;
-		precision = newPrecision;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__PRECISION, oldPrecision, precision));
+	public int getSpecifiedPrecision() {
+		return specifiedPrecision;
 	}
 
-	public void setPrecision(int newPrecision) {
-		setPrecisionGen(newPrecision);
-		if (newPrecision != PRECISION_EDEFAULT) {
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 */
+	public void setSpecifiedPrecisionGen(int newSpecifiedPrecision) {
+		int oldSpecifiedPrecision = specifiedPrecision;
+		specifiedPrecision = newSpecifiedPrecision;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_PRECISION, oldSpecifiedPrecision, specifiedPrecision));
+	}
+
+	public void setSpecifiedPrecision(int newSpecifiedPrecision) {
+		setSpecifiedPrecisionGen(newSpecifiedPrecision);
+		if (newSpecifiedPrecision != PRECISION_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setPrecisionForXml(newPrecision);
+		setPrecisionForXml(newSpecifiedPrecision);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
 	}
 
+	public int getScale() {
+		return (this.getSpecifiedScale() == SPECIFIED_SCALE_EDEFAULT) ? getDefaultScale() : this.getSpecifiedScale();
+	}
+
 	/**
-	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Scale</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Scale()
-	 * @model
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public int getScale() {
-		return scale;
+	public int getSpecifiedScale() {
+		return specifiedScale;
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getScale <em>Scale</em>}' attribute.
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 */
-	public void setScaleGen(int newScale) {
-		int oldScale = scale;
-		scale = newScale;
+	public void setSpecifiedScaleGen(int newSpecifiedScale) {
+		int oldSpecifiedScale = specifiedScale;
+		specifiedScale = newSpecifiedScale;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SCALE, oldScale, scale));
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_SCALE, oldSpecifiedScale, specifiedScale));
 	}
 
-	public void setScale(int newScale) {
-		setScaleGen(newScale);
-		if (newScale != SCALE_EDEFAULT) {
+	public void setSpecifiedScale(int newSpecifiedScale) {
+		setSpecifiedScaleGen(newSpecifiedScale);
+		if (newSpecifiedScale != SCALE_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setScaleForXml(newScale);
+		setScaleForXml(newSpecifiedScale);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
@@ -313,7 +357,7 @@
 	 * @generated NOT
 	 */
 	public void setLengthForXml(int newLengthForXml) {
-		setLengthGen(newLengthForXml);
+		setSpecifiedLengthGen(newLengthForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__LENGTH_FOR_XML, null, newLengthForXml));
@@ -346,7 +390,7 @@
 	 * @generated NOT
 	 */
 	public void setPrecisionForXml(int newPrecisionForXml) {
-		setPrecisionGen(newPrecisionForXml);
+		setSpecifiedPrecisionGen(newPrecisionForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__PRECISION_FOR_XML, null, newPrecisionForXml));
@@ -379,12 +423,24 @@
 	 * @generated NOT
 	 */
 	public void setScaleForXml(int newScaleForXml) {
-		setScaleGen(newScaleForXml);
+		setSpecifiedScaleGen(newScaleForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SCALE_FOR_XML, null, newScaleForXml));
 	}
 
+	public int getDefaultLength() {
+		return DEFAULT_LENGTH;
+	}
+
+	public int getDefaultPrecision() {
+		return DEFAULT_PRECISION;
+	}
+
+	public int getDefaultScale() {
+		return DEFAULT_SCALE;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -395,10 +451,16 @@
 		switch (featureID) {
 			case OrmPackage.XML_COLUMN__LENGTH :
 				return new Integer(getLength());
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				return new Integer(getSpecifiedLength());
 			case OrmPackage.XML_COLUMN__PRECISION :
 				return new Integer(getPrecision());
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				return new Integer(getSpecifiedPrecision());
 			case OrmPackage.XML_COLUMN__SCALE :
 				return new Integer(getScale());
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				return new Integer(getSpecifiedScale());
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				return new Integer(getLengthForXml());
 			case OrmPackage.XML_COLUMN__PRECISION_FOR_XML :
@@ -417,14 +479,14 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case OrmPackage.XML_COLUMN__LENGTH :
-				setLength(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(((Integer) newValue).intValue());
 				return;
-			case OrmPackage.XML_COLUMN__PRECISION :
-				setPrecision(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(((Integer) newValue).intValue());
 				return;
-			case OrmPackage.XML_COLUMN__SCALE :
-				setScale(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(((Integer) newValue).intValue());
 				return;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				setLengthForXml(((Integer) newValue).intValue());
@@ -447,14 +509,14 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case OrmPackage.XML_COLUMN__LENGTH :
-				setLength(LENGTH_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(SPECIFIED_LENGTH_EDEFAULT);
 				return;
-			case OrmPackage.XML_COLUMN__PRECISION :
-				setPrecision(PRECISION_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(SPECIFIED_PRECISION_EDEFAULT);
 				return;
-			case OrmPackage.XML_COLUMN__SCALE :
-				setScale(SCALE_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(SPECIFIED_SCALE_EDEFAULT);
 				return;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				setLengthForXml(LENGTH_FOR_XML_EDEFAULT);
@@ -478,11 +540,17 @@
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case OrmPackage.XML_COLUMN__LENGTH :
-				return length != LENGTH_EDEFAULT;
+				return getLength() != LENGTH_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				return specifiedLength != SPECIFIED_LENGTH_EDEFAULT;
 			case OrmPackage.XML_COLUMN__PRECISION :
-				return precision != PRECISION_EDEFAULT;
+				return getPrecision() != PRECISION_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				return specifiedPrecision != SPECIFIED_PRECISION_EDEFAULT;
 			case OrmPackage.XML_COLUMN__SCALE :
-				return scale != SCALE_EDEFAULT;
+				return getScale() != SCALE_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				return specifiedScale != SPECIFIED_SCALE_EDEFAULT;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				return getLengthForXml() != LENGTH_FOR_XML_EDEFAULT;
 			case OrmPackage.XML_COLUMN__PRECISION_FOR_XML :
@@ -504,10 +572,16 @@
 			switch (derivedFeatureID) {
 				case OrmPackage.XML_COLUMN__LENGTH :
 					return JpaCoreMappingsPackage.ICOLUMN__LENGTH;
+				case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH;
 				case OrmPackage.XML_COLUMN__PRECISION :
 					return JpaCoreMappingsPackage.ICOLUMN__PRECISION;
+				case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION;
 				case OrmPackage.XML_COLUMN__SCALE :
 					return JpaCoreMappingsPackage.ICOLUMN__SCALE;
+				case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -526,10 +600,16 @@
 			switch (baseFeatureID) {
 				case JpaCoreMappingsPackage.ICOLUMN__LENGTH :
 					return OrmPackage.XML_COLUMN__LENGTH;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH :
+					return OrmPackage.XML_COLUMN__SPECIFIED_LENGTH;
 				case JpaCoreMappingsPackage.ICOLUMN__PRECISION :
 					return OrmPackage.XML_COLUMN__PRECISION;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION :
+					return OrmPackage.XML_COLUMN__SPECIFIED_PRECISION;
 				case JpaCoreMappingsPackage.ICOLUMN__SCALE :
 					return OrmPackage.XML_COLUMN__SCALE;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE :
+					return OrmPackage.XML_COLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -547,12 +627,12 @@
 		if (eIsProxy())
 			return super.toString();
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (length: ");
-		result.append(length);
-		result.append(", precision: ");
-		result.append(precision);
-		result.append(", scale: ");
-		result.append(scale);
+		result.append(" (specifiedLength: ");
+		result.append(specifiedLength);
+		result.append(", specifiedPrecision: ");
+		result.append(specifiedPrecision);
+		result.append(", specifiedScale: ");
+		result.append(specifiedScale);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
index 2f0c1f7..eda5853 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
@@ -11,7 +11,6 @@
 
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.Name;
 
 /**
  * Wrap a declaration annotation element adapter and simply
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
index aaf8467..9abbc8f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
@@ -20,8 +20,11 @@
  * The following features are supported:
  * <ul>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getLength <em>Length</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}</li>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}</li>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getScale <em>Scale</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}</li>
  * </ul>
  * </p>
  *
@@ -31,9 +34,14 @@
  */
 public interface IColumn extends IAbstractColumn
 {
+	int DEFAULT_LENGTH = 255;
+
+	int DEFAULT_PRECISION = 0;
+
+	int DEFAULT_SCALE = 0;
+
 	/**
 	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
@@ -41,22 +49,38 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Length()
-	 * @model default="255"
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getLength();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getLength <em>Length</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setLength(int value);
+	int getSpecifiedLength();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	void setSpecifiedLength(int value);
 
 	/**
 	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
@@ -67,22 +91,38 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Precision()
-	 * @model
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getPrecision();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setPrecision(int value);
+	int getSpecifiedPrecision();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 */
+	void setSpecifiedPrecision(int value);
 
 	/**
 	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
@@ -93,22 +133,62 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Scale()
-	 * @model
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getScale();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getScale <em>Scale</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setScale(int value);
+	int getSpecifiedScale();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 */
+	void setSpecifiedScale(int value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultLength();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultPrecision();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultScale();
 
 	void refreshDefaults(DefaultsContext defaultsContext);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
index 35eb236..2cd8c08 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
@@ -827,13 +827,31 @@
 	public static final int ICOLUMN__LENGTH = IABSTRACT_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_LENGTH = IABSTRACT_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN__PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 1;
+	public static final int ICOLUMN__PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -842,7 +860,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN__SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 2;
+	public static final int ICOLUMN__SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The number of structural features of the '<em>IColumn</em>' class.
@@ -851,7 +878,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN_FEATURE_COUNT = IABSTRACT_COLUMN_FEATURE_COUNT + 3;
+	public static final int ICOLUMN_FEATURE_COUNT = IABSTRACT_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.mappings.IColumnMapping <em>IColumn Mapping</em>}' class.
@@ -4733,6 +4760,19 @@
 	}
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Length</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedLength() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4742,7 +4782,20 @@
 	 * @generated
 	 */
 	public EAttribute getIColumn_Precision() {
-		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(1);
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Precision</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedPrecision() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(3);
 	}
 
 	/**
@@ -4755,7 +4808,20 @@
 	 * @generated
 	 */
 	public EAttribute getIColumn_Scale() {
-		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(2);
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Scale</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedScale() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(5);
 	}
 
 	/**
@@ -6594,8 +6660,11 @@
 		createEAttribute(iAbstractColumnEClass, IABSTRACT_COLUMN__DEFAULT_TABLE);
 		iColumnEClass = createEClass(ICOLUMN);
 		createEAttribute(iColumnEClass, ICOLUMN__LENGTH);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_LENGTH);
 		createEAttribute(iColumnEClass, ICOLUMN__PRECISION);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_PRECISION);
 		createEAttribute(iColumnEClass, ICOLUMN__SCALE);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_SCALE);
 		iColumnMappingEClass = createEClass(ICOLUMN_MAPPING);
 		iBasicEClass = createEClass(IBASIC);
 		createEAttribute(iBasicEClass, IBASIC__FETCH);
@@ -6872,9 +6941,15 @@
 		initEAttribute(getIAbstractColumn_SpecifiedTable(), ecorePackage.getEString(), "specifiedTable", null, 0, 1, IAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getIAbstractColumn_DefaultTable(), ecorePackage.getEString(), "defaultTable", null, 0, 1, IAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEClass(iColumnEClass, IColumn.class, "IColumn", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getIColumn_Length(), ecorePackage.getEInt(), "length", "255", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getIColumn_Precision(), ecorePackage.getEInt(), "precision", null, 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getIColumn_Scale(), ecorePackage.getEInt(), "scale", null, 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Length(), ecorePackage.getEInt(), "length", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedLength(), theEcorePackage.getEInt(), "specifiedLength", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Precision(), ecorePackage.getEInt(), "precision", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedPrecision(), theEcorePackage.getEInt(), "specifiedPrecision", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Scale(), ecorePackage.getEInt(), "scale", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedScale(), theEcorePackage.getEInt(), "specifiedScale", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultLength", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultPrecision", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultScale", 0, 1, IS_UNIQUE, IS_ORDERED);
 		initEClass(iColumnMappingEClass, IColumnMapping.class, "IColumnMapping", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		addEOperation(iColumnMappingEClass, this.getIColumn(), "getColumn", 0, 1, IS_UNIQUE, IS_ORDERED);
 		initEClass(iBasicEClass, IBasic.class, "IBasic", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -7533,6 +7608,14 @@
 		public static final EAttribute ICOLUMN__LENGTH = eINSTANCE.getIColumn_Length();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_LENGTH = eINSTANCE.getIColumn_SpecifiedLength();
+
+		/**
 		 * The meta object literal for the '<em><b>Precision</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7541,6 +7624,14 @@
 		public static final EAttribute ICOLUMN__PRECISION = eINSTANCE.getIColumn_Precision();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Precision</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_PRECISION = eINSTANCE.getIColumn_SpecifiedPrecision();
+
+		/**
 		 * The meta object literal for the '<em><b>Scale</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7549,6 +7640,14 @@
 		public static final EAttribute ICOLUMN__SCALE = eINSTANCE.getIColumn_Scale();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Scale</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_SCALE = eINSTANCE.getIColumn_SpecifiedScale();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.mappings.IColumnMapping <em>IColumn Mapping</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->