support for basic mapping column validation
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel b/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel
index 847e88f..e9d44bc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel
+++ b/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel
@@ -221,6 +221,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlNamedColumn/columnDefinition"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlNamedColumn/name"/>
     </genClasses>
+    <genClasses image="false" ecoreClass="orm.ecore#//AbstractXmlNamedColumn"/>
     <genClasses image="false" ecoreClass="orm.ecore#//XmlAbstractColumn">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlAbstractColumn/insertable"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlAbstractColumn/nullable"/>
@@ -228,6 +229,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlAbstractColumn/unique"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlAbstractColumn/updatable"/>
     </genClasses>
+    <genClasses image="false" ecoreClass="orm.ecore#//AbstractXmlAbstractColumn"/>
     <genClasses image="false" ecoreClass="orm.ecore#//XmlColumn">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlColumn/length"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orm.ecore#//XmlColumn/precision"/>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/orm.ecore b/jpa/plugins/org.eclipse.jpt.core/model/orm.ecore
index 96997b0..ee9467a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/orm.ecore
+++ b/jpa/plugins/org.eclipse.jpt.core/model/orm.ecore
@@ -270,6 +270,8 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnDefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlNamedColumn" abstract="true"
+      eSuperTypes="#//XmlNamedColumn"/>
   <eClassifiers xsi:type="ecore:EClass" name="XmlAbstractColumn" abstract="true" interface="true"
       eSuperTypes="#//XmlNamedColumn">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="insertable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//BooleanObject"/>
@@ -278,17 +280,19 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//BooleanObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="updatable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//BooleanObject"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlAbstractColumn" abstract="true"
+      eSuperTypes="#//AbstractXmlNamedColumn #//XmlAbstractColumn"/>
   <eClassifiers xsi:type="ecore:EClass" name="XmlColumn" abstract="true" interface="true"
       eSuperTypes="#//XmlAbstractColumn">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IntObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IntObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IntObject"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ColumnImpl" eSuperTypes="#//XmlColumn"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ColumnImpl" eSuperTypes="#//AbstractXmlAbstractColumn #//XmlColumn"/>
   <eClassifiers xsi:type="ecore:EClass" name="ColumnResult">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="XmlDiscriminatorColumn" eSuperTypes="#//XmlNamedColumn">
+  <eClassifiers xsi:type="ecore:EClass" name="XmlDiscriminatorColumn" eSuperTypes="#//AbstractXmlNamedColumn">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="discriminatorType" eType="#//DiscriminatorType"
         defaultValueLiteral="STRING"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IntObject"/>
@@ -349,7 +353,7 @@
       eSuperTypes="#//XmlAbstractColumn">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="referencedColumnName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="JoinColumnImpl" eSuperTypes="#//XmlJoinColumn"/>
+  <eClassifiers xsi:type="ecore:EClass" name="JoinColumnImpl" eSuperTypes="#//AbstractXmlAbstractColumn #//XmlJoinColumn"/>
   <eClassifiers xsi:type="ecore:EClass" name="XmlJoinTable" abstract="true" interface="true"
       eSuperTypes="#//XmlBaseTable">
     <eStructuralFeatures xsi:type="ecore:EReference" name="joinColumns" upperBound="-1"
@@ -381,7 +385,7 @@
   <eClassifiers xsi:type="ecore:EClass" name="PrePersist" eSuperTypes="#//EventMethod"/>
   <eClassifiers xsi:type="ecore:EClass" name="PreRemove" eSuperTypes="#//EventMethod"/>
   <eClassifiers xsi:type="ecore:EClass" name="PreUpdate" eSuperTypes="#//EventMethod"/>
-  <eClassifiers xsi:type="ecore:EClass" name="XmlPrimaryKeyJoinColumn" eSuperTypes="#//XmlNamedColumn">
+  <eClassifiers xsi:type="ecore:EClass" name="XmlPrimaryKeyJoinColumn" eSuperTypes="#//AbstractXmlNamedColumn">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="referencedColumnName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="XmlQueryHint">
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaFactory.java
index b724a1a..6fe7b66 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaFactory.java
@@ -11,13 +11,10 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.AssociationOverride;
 import org.eclipse.jpt.core.context.AttributeOverride;
 import org.eclipse.jpt.core.context.BaseJpaContent;
-import org.eclipse.jpt.core.context.JoinColumn;
 import org.eclipse.jpt.core.context.JpaContextNode;
-import org.eclipse.jpt.core.context.NamedColumn;
 import org.eclipse.jpt.core.context.java.JavaAbstractJoinColumn;
 import org.eclipse.jpt.core.context.java.JavaAssociationOverride;
 import org.eclipse.jpt.core.context.java.JavaAttributeMapping;
@@ -56,6 +53,7 @@
 import org.eclipse.jpt.core.context.java.JavaTypeMapping;
 import org.eclipse.jpt.core.context.java.JavaVersionMapping;
 import org.eclipse.jpt.core.context.orm.EntityMappings;
+import org.eclipse.jpt.core.context.orm.OrmAbstractJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
 import org.eclipse.jpt.core.context.orm.OrmAttributeMapping;
 import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
@@ -74,6 +72,7 @@
 import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
 import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
 import org.eclipse.jpt.core.context.orm.OrmMappedSuperclass;
+import org.eclipse.jpt.core.context.orm.OrmNamedColumn;
 import org.eclipse.jpt.core.context.orm.OrmNamedNativeQuery;
 import org.eclipse.jpt.core.context.orm.OrmNamedQuery;
 import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
@@ -216,17 +215,17 @@
 	
 	OrmSecondaryTable buildOrmSecondaryTable(OrmEntity parent);
 	
-	OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, AbstractJoinColumn.Owner owner);
+	OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, OrmAbstractJoinColumn.Owner owner);
 	
 	OrmJoinTable buildOrmJoinTable(OrmRelationshipMapping parent);
 	
-	OrmJoinColumn buildOrmJoinColumn(OrmJpaContextNode parent, JoinColumn.Owner owner);
+	OrmJoinColumn buildOrmJoinColumn(OrmJpaContextNode parent, OrmJoinColumn.Owner owner);
 	
 	OrmAttributeOverride buildOrmAttributeOverride(OrmJpaContextNode parent, AttributeOverride.Owner owner, XmlAttributeOverride xmlAttributeOverride);
 	
 	OrmAssociationOverride buildOrmAssociationOverride(OrmJpaContextNode parent, AssociationOverride.Owner owner, XmlAssociationOverride associationOverride);
 
-	OrmDiscriminatorColumn buildOrmDiscriminatorColumn(OrmEntity parent, NamedColumn.Owner owner);
+	OrmDiscriminatorColumn buildOrmDiscriminatorColumn(OrmEntity parent, OrmNamedColumn.Owner owner);
 	
 	OrmColumn buildOrmColumn(OrmJpaContextNode parent, OrmColumn.Owner owner);
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaPersistentAttribute.java
index 788a2ea..4c2e495 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaPersistentAttribute.java
@@ -33,11 +33,11 @@
 	
 	JavaPersistentType persistentType();
 	
-	void initializeFromResource(JavaResourcePersistentAttribute persistentAttributeResource);
+	void initializeFromResource(JavaResourcePersistentAttribute resourcePersistentAttribute);
 
-	void update(JavaResourcePersistentAttribute persistentAttributeResource);
+	void update(JavaResourcePersistentAttribute resourcePersistentAttribute);
 	
-	JavaResourcePersistentAttribute getPersistentAttributeResource();
+	JavaResourcePersistentAttribute getResourcePersistentAttribute();
 	
 	/**
 	 * Return whether the attribute contains the given offset into the text file.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractColumn.java
new file mode 100644
index 0000000..96724c2
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractColumn.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ * 
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.context.orm;
+
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.context.AbstractColumn;
+
+
+/**
+ * 
+ * 
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ */
+public interface OrmAbstractColumn extends AbstractColumn, OrmNamedColumn
+{
+
+	/**
+	 * Return the (best guess) text location of the column's table.
+	 */
+	TextRange tableTextRange();
+
+	Owner owner();
+	
+	/**
+	 * interface allowing columns to be used in multiple places
+	 * (e.g. basic mappings and attribute overrides)
+	 */
+	interface Owner extends OrmNamedColumn.Owner, AbstractColumn.Owner
+	{
+
+	}
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractJoinColumn.java
new file mode 100644
index 0000000..9ba11e4
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmAbstractJoinColumn.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ * 
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.context.orm;
+
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.context.AbstractJoinColumn;
+
+/**
+ * 
+ * 
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ */
+public interface OrmAbstractJoinColumn extends AbstractJoinColumn, OrmNamedColumn
+{
+
+	/**
+	 * Return the (best guess) text location of the referenced column name
+	 */
+	TextRange referencedColumnNameTextRange();
+
+	
+	Owner owner();
+	/**
+	 * interface allowing join columns to be used in multiple places
+	 * (e.g. 1:1 mappings and join tables)
+	 */
+	interface Owner extends AbstractJoinColumn.Owner, OrmNamedColumn.Owner
+	{
+
+	}
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmColumn.java
index 558efc6..aa068b2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmColumn.java
@@ -9,7 +9,6 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.context.orm;
 
-import org.eclipse.jpt.core.context.AbstractColumn;
 import org.eclipse.jpt.core.context.Column;
 import org.eclipse.jpt.core.resource.orm.XmlColumn;
 
@@ -22,7 +21,7 @@
  * pioneering adopters on the understanding that any code that uses this API
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
-public interface OrmColumn extends Column, OrmJpaContextNode
+public interface OrmColumn extends Column, OrmAbstractColumn
 {
 	
 	Owner owner();
@@ -35,7 +34,7 @@
 	 * interface allowing columns to be used in multiple places
 	 * (e.g. basic mappings and attribute overrides)
 	 */
-	interface Owner extends AbstractColumn.Owner
+	interface Owner extends OrmAbstractColumn.Owner
 	{
 		XmlColumn columnResource();
 		
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmDiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmDiscriminatorColumn.java
index bef5e13..a600159 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmDiscriminatorColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmDiscriminatorColumn.java
@@ -21,9 +21,9 @@
  * pioneering adopters on the understanding that any code that uses this API
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
-public interface OrmDiscriminatorColumn extends DiscriminatorColumn, OrmJpaContextNode
+public interface OrmDiscriminatorColumn extends DiscriminatorColumn, OrmNamedColumn
 {
-	public abstract void initialize(XmlEntity entity);
+	void initialize(XmlEntity entity);
 
-	public abstract void update(XmlEntity entity);
+	void update(XmlEntity entity);
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmJoinColumn.java
index 3f67580..ff10287 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmJoinColumn.java
@@ -21,12 +21,22 @@
  * pioneering adopters on the understanding that any code that uses this API
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
-public interface OrmJoinColumn extends JoinColumn, OrmJpaContextNode
+public interface OrmJoinColumn extends JoinColumn, OrmAbstractJoinColumn, OrmAbstractColumn
 {
 	void initializeFrom(JoinColumn oldColumn);
 	
 	void initialize(XmlJoinColumn column);
 	
 	void update(XmlJoinColumn column);
+	
+	Owner owner();
 
+	/**
+	 * interface allowing join columns to be used in multiple places
+	 * (e.g. 1:1 mappings and join tables)
+	 */
+	interface Owner extends JoinColumn.Owner, OrmAbstractJoinColumn.Owner, OrmAbstractColumn.Owner
+	{
+
+	}
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmNamedColumn.java
new file mode 100644
index 0000000..cb5ea06
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmNamedColumn.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ * 
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.context.orm;
+
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.context.NamedColumn;
+
+
+/**
+ * 
+ * 
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ */
+public interface OrmNamedColumn extends NamedColumn, OrmJpaContextNode
+{
+
+	Owner owner();
+	
+	/**
+	 * Return the (best guess) text location of the column's name.
+	 */
+	TextRange nameTextRange();
+
+	/**
+	 * interface allowing columns to be used in multiple places
+	 * (e.g. basic mappings and attribute overrides)
+	 */
+	interface Owner extends NamedColumn.Owner
+	{
+		/**
+		 * Return the column owner's text range. This can be returned by the
+		 * column when its annotation is not present.
+		 */
+		TextRange validationTextRange();
+
+	}
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPrimaryKeyJoinColumn.java
index 6f7a1a8..67eb42f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPrimaryKeyJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmPrimaryKeyJoinColumn.java
@@ -21,7 +21,7 @@
  * pioneering adopters on the understanding that any code that uses this API
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
-public interface OrmPrimaryKeyJoinColumn extends PrimaryKeyJoinColumn, OrmJpaContextNode
+public interface OrmPrimaryKeyJoinColumn extends PrimaryKeyJoinColumn, OrmAbstractJoinColumn
 {
 	void initialize(XmlPrimaryKeyJoinColumn column);
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
index db2e0ef..146de95 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmTypeMapping.java
@@ -75,5 +75,9 @@
 
 	TextRange selectionTextRange();
 
+	TextRange attributesTextRange();
+	
 	boolean containsOffset(int textOffset);
+	
+	OrmPersistentType persistentType();
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaEmbeddedMapping.java
index 2240150..9da3c53 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaEmbeddedMapping.java
@@ -345,7 +345,7 @@
 	//******* static methods *********
 	
 	public static Embeddable embeddableFor(JavaPersistentAttribute persistentAttribute) {
-		String qualifiedTypeName = persistentAttribute.getPersistentAttributeResource().getQualifiedTypeName();
+		String qualifiedTypeName = persistentAttribute.getResourcePersistentAttribute().getQualifiedTypeName();
 		if (qualifiedTypeName == null) {
 			return null;
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentAttribute.java
index baee496..3d3b763 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentAttribute.java
@@ -63,7 +63,7 @@
 		this.specifiedMapping = createJavaAttributeMappingFromAnnotation(javaMappingAnnotationName, persistentAttributeResource);
 	}
 	
-	public JavaResourcePersistentAttribute getPersistentAttributeResource() {
+	public JavaResourcePersistentAttribute getResourcePersistentAttribute() {
 		return this.persistentAttributeResource;
 	}
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/JavaBasicMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/JavaBasicMappingProvider.java
index 03113b0..99e4dcd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/JavaBasicMappingProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/JavaBasicMappingProvider.java
@@ -50,7 +50,7 @@
 	}
 	
 	public boolean defaultApplies(JavaPersistentAttribute persistentAttribute) {
-		return persistentAttribute.getPersistentAttributeResource().typeIsBasic();
+		return persistentAttribute.getResourcePersistentAttribute().typeIsBasic();
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
index 16808b3..d0e58f2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmAttributeMapping.java
@@ -10,6 +10,9 @@
 package org.eclipse.jpt.core.internal.context.orm;
 
 import java.util.List;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jpt.core.MappingKeys;
 import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.NonOwningMapping;
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
@@ -33,6 +36,7 @@
 import org.eclipse.jpt.core.context.orm.OrmVersionMapping;
 import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages;
 import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
+import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
 import org.eclipse.jpt.core.resource.orm.XmlAttributeMapping;
 import org.eclipse.jpt.utility.internal.StringTools;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
@@ -168,15 +172,6 @@
 		return this.persistentAttribute().typeMapping();
 	}
 
-//	@Override
-//	public ITextRange validationTextRange() {
-//		return (this.isVirtual()) ? this.getPersistentType().attributesTextRange() : super.validationTextRange();
-//	}
-//
-//	public ITextRange nameTextRange() {
-//		IDOMNode nameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.NAME);
-//		return (nameNode != null) ? this.buildTextRange(nameNode) : this.validationTextRange();
-//	}
 
 	public boolean isOverridableAttributeMapping() {
 		return false;
@@ -214,17 +209,21 @@
 		return null;
 	}
 	
+	
+	protected boolean entityOwned() {
+		return typeMapping().getKey() == MappingKeys.ENTITY_TYPE_MAPPING_KEY;
+	}
+
 	public boolean contains(int textOffset) {
 		return this.attributeMapping.containsOffset(textOffset);
 	}
 	
 	public TextRange selectionTextRange() {
 		return this.attributeMapping.selectionTextRange();
-	}
-	
+	}	
 	
 	public TextRange validationTextRange() {
-		return this.attributeMapping.validationTextRange();
+		return (this.persistentAttribute().isVirtual()) ? this.typeMapping().attributesTextRange() : this.attributeMapping.validationTextRange();
 	}
 	
 	public TextRange nameTextRange() {
@@ -234,9 +233,14 @@
 	@Override
 	public void addToMessages(List<IMessage> messages) {
 		super.addToMessages(messages);
+		addAttributeMessages(messages);
+		addInvalidMappingMessage(messages);
+	}
+	
+	protected void addAttributeMessages(List<IMessage> messages) {
 		addUnspecifiedAttributeMessage(messages);
 		addUnresolvedAttributeMessage(messages);
-		addInvalidMappingMessage(messages);
+		addModifierMessages(messages);
 	}
 	
 	protected void addUnspecifiedAttributeMessage(List<IMessage> messages) {
@@ -259,10 +263,60 @@
 					IMessage.HIGH_SEVERITY,
 					JpaValidationMessages.PERSISTENT_ATTRIBUTE_UNRESOLVED_NAME,
 					new String[] {getName(), persistentAttribute().persistentType().getMapping().getClass_()},
-					this, nameTextRange())
+					this, 
+					nameTextRange())
 			);
 		}
 	}
+	
+	protected void addModifierMessages(List<IMessage> messages) {
+		if (getKey() == MappingKeys.TRANSIENT_ATTRIBUTE_MAPPING_KEY) {
+			return;
+		}
+		
+		if (getJavaPersistentAttribute() == null) {
+			return;
+		}
+		JavaResourcePersistentAttribute resourcePersistentAttribute = getJavaPersistentAttribute().getResourcePersistentAttribute();
+		if (resourcePersistentAttribute== null) {
+			return;
+		}
+
+		if (resourcePersistentAttribute.isForField()) {
+			int flags;
+			try {
+				flags = resourcePersistentAttribute.getMember().getJdtMember().getFlags();
+			} catch (JavaModelException jme) { 
+				/* no error to log, in that case */ 
+				return;
+			}
+			//TODO validation : need to have a validation message for final methods as well.
+			//From the JPA spec : No methods or persistent instance variables of the entity class may be final.
+			if (Flags.isFinal(flags)) {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.PERSISTENT_ATTRIBUTE_FINAL_FIELD,
+						new String[] {getName()},
+						persistentAttribute(),
+						persistentAttribute().validationTextRange())
+				);
+			}
+			
+			if (Flags.isPublic(flags)) {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.PERSISTENT_ATTRIBUTE_PUBLIC_FIELD,
+						new String[] {getName()},
+						persistentAttribute(), 
+						persistentAttribute().validationTextRange())
+				);
+				
+			}
+		}
+	}
+
 	//TODO validation message - i think more info is needed in this message.  include type mapping type?
 	protected void addInvalidMappingMessage(List<IMessage> messages) {
 		if (! typeMapping().attributeMappingKeyAllowed(getKey())) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmColumn.java
index 7a8c5f6..6b3ab28 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmColumn.java
@@ -9,13 +9,15 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.AbstractColumn;
+import org.eclipse.jpt.core.context.orm.OrmAbstractColumn;
 import org.eclipse.jpt.core.context.orm.OrmJpaContextNode;
 import org.eclipse.jpt.core.resource.orm.XmlAbstractColumn;
 
 
 public abstract class AbstractOrmColumn<T extends XmlAbstractColumn> extends AbstractOrmNamedColumn<T>
-	implements AbstractColumn
+	implements OrmAbstractColumn
 {
 	protected String specifiedTable;
 	
@@ -29,7 +31,7 @@
 	
 	protected Boolean specifiedUpdatable;
 
-	protected AbstractOrmColumn(OrmJpaContextNode parent, AbstractColumn.Owner owner) {
+	protected AbstractOrmColumn(OrmJpaContextNode parent, OrmAbstractColumn.Owner owner) {
 		super(parent, owner);
 	}
 	
@@ -43,8 +45,8 @@
 	}
 	
 	@Override
-	public AbstractColumn.Owner owner() {
-		return (AbstractColumn.Owner) super.owner();
+	public OrmAbstractColumn.Owner owner() {
+		return (OrmAbstractColumn.Owner) super.owner();
 	}
 	
 //	@Override
@@ -245,14 +247,16 @@
 		return this.getTable();
 	}
 
-//
-//	public ITextRange tableTextRange() {
-//		if (node == null) {
-//			return owner.validationTextRange();
-//		}
-//		IDOMNode tableNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.ENTITY__TABLE);
-//		return (tableNode == null) ? validationTextRange() : buildTextRange(tableNode);
-//	}
+
+	public TextRange tableTextRange() {
+		if (columnResource() != null) {
+			TextRange textRange = columnResource().tableTextRange();
+			if (textRange != null) {
+				return textRange;
+			}
+		}
+		return this.parent().validationTextRange(); 
+	}
 	
 	@Override
 	protected void initialize(T column) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmNamedColumn.java
index 1e7b056..7f04286 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmNamedColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmNamedColumn.java
@@ -12,13 +12,14 @@
 import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.NamedColumn;
 import org.eclipse.jpt.core.context.orm.OrmJpaContextNode;
+import org.eclipse.jpt.core.context.orm.OrmNamedColumn;
 import org.eclipse.jpt.core.resource.orm.XmlNamedColumn;
 import org.eclipse.jpt.db.internal.Column;
 import org.eclipse.jpt.db.internal.Table;
 
 
 public abstract class AbstractOrmNamedColumn<T extends XmlNamedColumn>  extends AbstractOrmJpaContextNode
-	implements NamedColumn
+	implements OrmNamedColumn
 {
 	protected Owner owner;
 	
@@ -32,6 +33,11 @@
 		super(parent);
 		this.owner = owner;
 	}
+
+	@Override
+	public OrmJpaContextNode parent() {
+		return (OrmJpaContextNode) super.parent();
+	}
 	
 	public void initializeFrom(NamedColumn oldColumn) {
 		setSpecifiedName(oldColumn.getSpecifiedName());
@@ -142,17 +148,14 @@
 	}
 
 	public TextRange nameTextRange() {
-		// TODO Auto-generated method stub
-		return null;
+		if (columnResource() != null) {
+			TextRange textRange = columnResource().nameTextRange();
+			if (textRange != null) {
+				return textRange;
+			}
+		}
+		return this.parent().validationTextRange(); 
 	}
-	
-//	public ITextRange nameTextRange() {
-//		if (node == null) {
-//			return owner.validationTextRange();
-//		}
-//		IDOMNode nameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.NAME);
-//		return (nameNode == null) ? validationTextRange() : buildTextRange(nameNode);
-//	}
 
 	public TextRange validationTextRange() {
 		return columnResource().validationTextRange();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java
index be0bb04..b0582d4 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmSingleRelationshipMapping.java
@@ -11,6 +11,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.Entity;
 import org.eclipse.jpt.core.context.FetchType;
@@ -212,7 +213,7 @@
 	}
 
 	
-	public class JoinColumnOwner implements JoinColumn.Owner
+	public class JoinColumnOwner implements OrmJoinColumn.Owner
 	{
 
 		public JoinColumnOwner() {
@@ -274,5 +275,10 @@
 		public int joinColumnsSize() {
 			return AbstractOrmSingleRelationshipMapping.this.joinColumnsSize();
 		}
+		
+		public TextRange validationTextRange() {
+			// TODO Auto-generated method stub
+			return null;
+		}
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java
index 3f4353a..a7732f2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAssociationOverride.java
@@ -17,7 +17,6 @@
 import org.eclipse.jpt.core.context.AssociationOverride;
 import org.eclipse.jpt.core.context.BaseOverride;
 import org.eclipse.jpt.core.context.Entity;
-import org.eclipse.jpt.core.context.JoinColumn;
 import org.eclipse.jpt.core.context.RelationshipMapping;
 import org.eclipse.jpt.core.context.TypeMapping;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
@@ -102,7 +101,7 @@
 		return joinColumn;
 	}
 	
-	protected JoinColumn.Owner createJoinColumnOwner() {
+	protected OrmJoinColumn.Owner createJoinColumnOwner() {
 		return new JoinColumnOwner();
 	}
 
@@ -181,7 +180,7 @@
 		return null;
 	}
 
-	class JoinColumnOwner implements JoinColumn.Owner
+	class JoinColumnOwner implements OrmJoinColumn.Owner
 	{
 
 		public JoinColumnOwner() {
@@ -243,6 +242,11 @@
 		public int joinColumnsSize() {
 			return GenericOrmAssociationOverride.this.joinColumnsSize();
 		}
+		
+		public TextRange validationTextRange() {
+			// TODO Auto-generated method stub
+			return null;
+		}
 
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmBasicMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmBasicMapping.java
index 24842cf..af239b1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmBasicMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmBasicMapping.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
+import java.util.List;
 import org.eclipse.jpt.core.MappingKeys;
 import org.eclipse.jpt.core.context.BasicMapping;
 import org.eclipse.jpt.core.context.ColumnMapping;
@@ -22,11 +23,14 @@
 import org.eclipse.jpt.core.context.orm.OrmColumn;
 import org.eclipse.jpt.core.context.orm.OrmColumnMapping;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
+import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages;
+import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
 import org.eclipse.jpt.core.resource.orm.AbstractTypeMapping;
 import org.eclipse.jpt.core.resource.orm.OrmFactory;
 import org.eclipse.jpt.core.resource.orm.XmlBasic;
 import org.eclipse.jpt.core.resource.orm.XmlColumn;
 import org.eclipse.jpt.db.internal.Table;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
 
 public class GenericOrmBasicMapping extends AbstractOrmAttributeMapping<XmlBasic>
@@ -268,5 +272,68 @@
 	public void removeColumnResource() {
 		this.attributeMapping().setColumn(null);
 	}
+	
+	// ****************** validation ****************
+	
+	@Override
+	public void addToMessages(List<IMessage> messages) {
+		super.addToMessages(messages);
+		if (entityOwned()) {
+			addColumnMessages(messages);
+		}
+	}
+	
+	protected void addColumnMessages(List<IMessage> messages) {
+		OrmColumn column = getColumn();
+		String table = column.getTable();
+		boolean doContinue = isConnected();
+		
+		if (doContinue && typeMapping().tableNameIsInvalid(table)) {
+			if (persistentAttribute().isVirtual()) {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_TABLE,
+						new String[] {getName(), table, column.getName()},
+						column, 
+						column.tableTextRange())
+				);
+			}
+			else {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.COLUMN_UNRESOLVED_TABLE,
+						new String[] {table, column.getName()}, 
+						column, 
+						column.tableTextRange())
+				);
+			}
+			doContinue = false;
+		}
+		
+		if (doContinue && ! column.isResolved()) {
+			if (persistentAttribute().isVirtual()) {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_NAME,
+						new String[] {getName(), column.getName()}, 
+						column, 
+						column.nameTextRange())
+				);
+			}
+			else {
+				messages.add(
+					DefaultJpaValidationMessages.buildMessage(
+						IMessage.HIGH_SEVERITY,
+						JpaValidationMessages.COLUMN_UNRESOLVED_NAME,
+						new String[] {column.getName()}, 
+						column, 
+						column.nameTextRange())
+				);
+			}
+		}
+	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmDiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmDiscriminatorColumn.java
index d19bf56..ee6d115 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmDiscriminatorColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmDiscriminatorColumn.java
@@ -13,6 +13,7 @@
 import org.eclipse.jpt.core.context.DiscriminatorType;
 import org.eclipse.jpt.core.context.orm.OrmDiscriminatorColumn;
 import org.eclipse.jpt.core.context.orm.OrmJpaContextNode;
+import org.eclipse.jpt.core.context.orm.OrmNamedColumn;
 import org.eclipse.jpt.core.resource.orm.OrmFactory;
 import org.eclipse.jpt.core.resource.orm.XmlDiscriminatorColumn;
 import org.eclipse.jpt.core.resource.orm.XmlEntity;
@@ -33,7 +34,7 @@
 
 	protected XmlEntity entity;
 	
-	public GenericOrmDiscriminatorColumn(OrmJpaContextNode parent, Owner owner) {
+	public GenericOrmDiscriminatorColumn(OrmJpaContextNode parent, OrmNamedColumn.Owner owner) {
 		super(parent, owner);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
index b25a716..2ab8401 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
@@ -14,6 +14,7 @@
 import java.util.List;
 import java.util.ListIterator;
 import org.eclipse.jpt.core.MappingKeys;
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.AssociationOverride;
 import org.eclipse.jpt.core.context.AttributeOverride;
@@ -22,7 +23,6 @@
 import org.eclipse.jpt.core.context.DiscriminatorColumn;
 import org.eclipse.jpt.core.context.Entity;
 import org.eclipse.jpt.core.context.InheritanceType;
-import org.eclipse.jpt.core.context.NamedColumn;
 import org.eclipse.jpt.core.context.NamedNativeQuery;
 import org.eclipse.jpt.core.context.NamedQuery;
 import org.eclipse.jpt.core.context.PersistentAttribute;
@@ -35,10 +35,12 @@
 import org.eclipse.jpt.core.context.java.JavaEntity;
 import org.eclipse.jpt.core.context.java.JavaPersistentType;
 import org.eclipse.jpt.core.context.java.JavaSecondaryTable;
+import org.eclipse.jpt.core.context.orm.OrmAbstractJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
 import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
 import org.eclipse.jpt.core.context.orm.OrmDiscriminatorColumn;
 import org.eclipse.jpt.core.context.orm.OrmEntity;
+import org.eclipse.jpt.core.context.orm.OrmNamedColumn;
 import org.eclipse.jpt.core.context.orm.OrmNamedNativeQuery;
 import org.eclipse.jpt.core.context.orm.OrmNamedQuery;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
@@ -126,7 +128,7 @@
 		this.table = jpaFactory().buildOrmTable(this);
 		this.specifiedSecondaryTables = new ArrayList<OrmSecondaryTable>();
 		this.virtualSecondaryTables = new ArrayList<OrmSecondaryTable>();
-		this.discriminatorColumn = createXmlDiscriminatorColumn();
+		this.discriminatorColumn = buildDiscriminatorColumn();
 		this.specifiedPrimaryKeyJoinColumns = new ArrayList<OrmPrimaryKeyJoinColumn>();
 		this.defaultPrimaryKeyJoinColumns = new ArrayList<OrmPrimaryKeyJoinColumn>();
 		this.specifiedAttributeOverrides = new ArrayList<OrmAttributeOverride>();
@@ -137,12 +139,12 @@
 		this.namedNativeQueries = new ArrayList<OrmNamedNativeQuery>();
 	}
 	
-	protected OrmDiscriminatorColumn createXmlDiscriminatorColumn() {
+	protected OrmDiscriminatorColumn buildDiscriminatorColumn() {
 		return jpaFactory().buildOrmDiscriminatorColumn(this, buildDiscriminatorColumnOwner());
 	}
 	
-	protected NamedColumn.Owner buildDiscriminatorColumnOwner() {
-		return new NamedColumn.Owner(){
+	protected OrmNamedColumn.Owner buildDiscriminatorColumnOwner() {
+		return new OrmNamedColumn.Owner(){
 			public org.eclipse.jpt.db.internal.Table dbTable(String tableName) {
 				return GenericOrmEntity.this.dbTable(tableName);
 			}
@@ -155,6 +157,12 @@
 				//TODO default column name from java here or in XmlDiscriminatorColumn?
 				return DiscriminatorColumn.DEFAULT_NAME;
 			}
+			
+			public TextRange validationTextRange() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+			
 		};
 	}
 
@@ -563,7 +571,7 @@
 		return primaryKeyJoinColumn;
 	}
 	
-	protected AbstractJoinColumn.Owner createPrimaryKeyJoinColumnOwner() {
+	protected OrmAbstractJoinColumn.Owner createPrimaryKeyJoinColumnOwner() {
 		return new PrimaryKeyJoinColumnOwner();
 	}
 
@@ -1475,7 +1483,7 @@
 		sb.append(getName());
 	}
 	
-	class PrimaryKeyJoinColumnOwner implements AbstractJoinColumn.Owner
+	class PrimaryKeyJoinColumnOwner implements OrmAbstractJoinColumn.Owner
 	{
 		public TypeMapping typeMapping() {
 			return GenericOrmEntity.this;
@@ -1504,6 +1512,11 @@
 			}
 			return GenericOrmEntity.this.parentEntity().primaryKeyColumnName();
 		}
+		
+		public TextRange validationTextRange() {
+			// TODO Auto-generated method stub
+			return null;
+		}
 	}
 	
 	class AttributeOverrideOwner implements AttributeOverride.Owner {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinColumn.java
index 5e08661..e884872 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinColumn.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.JoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmJpaContextNode;
@@ -25,7 +26,7 @@
 
 	protected XmlJoinColumn joinColumn;
 
-	public GenericOrmJoinColumn(OrmJpaContextNode parent, JoinColumn.Owner owner) {
+	public GenericOrmJoinColumn(OrmJpaContextNode parent, OrmJoinColumn.Owner owner) {
 		super(parent, owner);
 	}
 
@@ -70,8 +71,8 @@
 	}
 	
 	@Override
-	public JoinColumn.Owner owner() {
-		return (JoinColumn.Owner) this.owner;
+	public OrmJoinColumn.Owner owner() {
+		return (OrmJoinColumn.Owner) this.owner;
 	}
 
 	public Table dbReferencedColumnTable() {
@@ -86,20 +87,14 @@
 	public boolean isReferencedColumnResolved() {
 		return dbReferencedColumn() != null;
 	}
-//
-//	public ITextRange referencedColumnNameTextRange() {
-//		if (node == null) {
-//			return owner.validationTextRange();
-//		}
-//		IDOMNode referencedColumnNameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.REFERENCED_COLUMN_NAME);
-//		return (referencedColumnNameNode == null) ? validationTextRange() : buildTextRange(referencedColumnNameNode);
-//	}
-//
-//	public void refreshDefaults(DefaultsContext defaultsContext) {
-//		setDefaultReferencedColumnName((String) defaultsContext.getDefault(GenericJpaPlatform.DEFAULT_JOIN_COLUMN_REFERENCED_COLUMN_NAME_KEY));
-//		setDefaultName((String) defaultsContext.getDefault(GenericJpaPlatform.DEFAULT_JOIN_COLUMN_NAME_KEY));
-//		setDefaultTable((String) defaultsContext.getDefault(GenericJpaPlatform.DEFAULT_JOIN_COLUMN_TABLE_KEY));
-//	}
+
+	public TextRange referencedColumnNameTextRange() {
+		if (columnResource() != null) {
+			return columnResource().referencedColumnNameTextRange();
+		}
+		return this.parent().validationTextRange(); 
+	}
+
 
 	@Override
 	protected XmlJoinColumn columnResource() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinTable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinTable.java
index 49a3fb6..89785de 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinTable.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmJoinTable.java
@@ -12,6 +12,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.AttributeMapping;
 import org.eclipse.jpt.core.context.Entity;
@@ -467,7 +468,7 @@
 	/**
 	 * just a little common behavior
 	 */
-	abstract class AbstractJoinColumnOwner implements JoinColumn.Owner
+	abstract class AbstractJoinColumnOwner implements OrmJoinColumn.Owner
 	{
 		AbstractJoinColumnOwner() {
 			super();
@@ -494,10 +495,11 @@
 		public boolean tableIsAllowed() {
 			return false;
 		}
-//
-//		public ITextRange validationTextRange() {
-//			return this.joinTable.validationTextRange();
-//		}
+
+		public TextRange validationTextRange() {
+			// TODO Auto-generated method stub
+			return null;
+		}
 
 		public org.eclipse.jpt.db.internal.Table dbTable(String tableName) {
 			if (GenericOrmJoinTable.this.getName() == null) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentAttribute.java
index 8d5da9b..e00d874 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentAttribute.java
@@ -350,14 +350,14 @@
 		super.addToMessages(messages);
 		getMapping().addToMessages(messages);
 	}
-
 	
 	public TextRange validationTextRange() {
 		if (isVirtual()) {
-			return persistentType().validationTextRange();
+			return persistentType().getMapping().attributesTextRange();
 		}
 		return this.attributeMapping.validationTextRange();
-	}	
+	}
+
 	@Override
 	public void toString(StringBuilder sb) {
 		super.toString(sb);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumn.java
index 45ab7e6..c9d8830 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumn.java
@@ -9,7 +9,8 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
-import org.eclipse.jpt.core.context.AbstractJoinColumn;
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.context.orm.OrmAbstractJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmJpaContextNode;
 import org.eclipse.jpt.core.context.orm.OrmPrimaryKeyJoinColumn;
 import org.eclipse.jpt.core.resource.orm.XmlPrimaryKeyJoinColumn;
@@ -25,7 +26,7 @@
 
 	protected XmlPrimaryKeyJoinColumn primaryKeyJoinColumn;
 	
-	public GenericOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, AbstractJoinColumn.Owner owner) {
+	public GenericOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, OrmAbstractJoinColumn.Owner owner) {
 		super(parent, owner);
 	}
 
@@ -72,8 +73,8 @@
 	}
 
 	@Override
-	public AbstractJoinColumn.Owner owner() {
-		return (AbstractJoinColumn.Owner) this.owner;
+	public OrmAbstractJoinColumn.Owner owner() {
+		return (OrmAbstractJoinColumn.Owner) this.owner;
 	}
 
 	public Column dbReferencedColumn() {
@@ -94,13 +95,12 @@
 		return dbReferencedColumn() != null;
 	}
 
-//	public ITextRange referencedColumnNameTextRange() {
-//		if (node == null) {
-//			return owner.validationTextRange();
-//		}
-//		IDOMNode referencedColumnNameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(node, OrmXmlMapper.REFERENCED_COLUMN_NAME);
-//		return (referencedColumnNameNode == null) ? validationTextRange() : buildTextRange(referencedColumnNameNode);
-//	}
+	public TextRange referencedColumnNameTextRange() {
+		if (columnResource() != null) {
+			return columnResource().referencedColumnNameTextRange();
+		}
+		return this.parent().validationTextRange(); 
+	}
 
 		
 	public boolean isVirtual() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmSecondaryTable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmSecondaryTable.java
index 7b4d3b7..e69565f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmSecondaryTable.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmSecondaryTable.java
@@ -12,10 +12,12 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.PrimaryKeyJoinColumn;
 import org.eclipse.jpt.core.context.SecondaryTable;
 import org.eclipse.jpt.core.context.TypeMapping;
+import org.eclipse.jpt.core.context.orm.OrmAbstractJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmEntity;
 import org.eclipse.jpt.core.context.orm.OrmPrimaryKeyJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmSecondaryTable;
@@ -96,7 +98,7 @@
 		return primaryKeyJoinColumn;
 	}
 	
-	protected AbstractJoinColumn.Owner createPrimaryKeyJoinColumnOwner() {
+	protected OrmAbstractJoinColumn.Owner createPrimaryKeyJoinColumnOwner() {
 		return new PrimaryKeyJoinColumnOwner();
 	}
 
@@ -244,7 +246,7 @@
 		}
 	}
 	
-	class PrimaryKeyJoinColumnOwner implements AbstractJoinColumn.Owner
+	class PrimaryKeyJoinColumnOwner implements OrmAbstractJoinColumn.Owner
 	{
 
 		public TypeMapping typeMapping() {
@@ -272,7 +274,11 @@
 				return null;
 			}
 			return ormEntity().parentEntity().primaryKeyColumnName();
-
+		}
+		
+		public TextRange validationTextRange() {
+			// TODO Auto-generated method stub
+			return null;
 		}
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmTransientMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmTransientMapping.java
index 9bb88bf..496c118 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmTransientMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmTransientMapping.java
@@ -9,7 +9,6 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
-import java.util.List;
 import org.eclipse.jpt.core.MappingKeys;
 import org.eclipse.jpt.core.context.orm.OrmAttributeMapping;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
@@ -17,7 +16,6 @@
 import org.eclipse.jpt.core.resource.orm.AbstractTypeMapping;
 import org.eclipse.jpt.core.resource.orm.OrmFactory;
 import org.eclipse.jpt.core.resource.orm.XmlTransient;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
 
 public class GenericOrmTransientMapping extends AbstractOrmAttributeMapping<XmlTransient> implements OrmTransientMapping
@@ -62,47 +60,5 @@
 	public void update(XmlTransient transientResource) {
 		super.update(transientResource);
 	}
-	
-	@Override
-	public void addToMessages(List<IMessage> messages) {
-		super.addToMessages(messages);
-//		addModifierMessages(messages);
-	}
-	
-//	protected void addModifierMessages(List<IMessage> messages) {
-//		OrmPersistentAttribute attribute = persistentAttribute();
-//		
-//		if (attribute.getMapping().getKey() != MappingKeys.TRANSIENT_ATTRIBUTE_MAPPING_KEY
-//				&& attribute.getAttribute() != null 
-//				&& attribute.getAttribute().isField()) {
-//			int flags;
-//			try {
-//				flags = attribute.getAttribute().getJdtMember().getFlags();
-//			} catch (JavaModelException jme) { 
-//				/* no error to log, in that case */ 
-//				return;
-//			}
-//			
-//			if (Flags.isFinal(flags)) {
-//				messages.add(
-//					DefaultJpaValidationMessages.buildMessage(
-//						IMessage.HIGH_SEVERITY,
-//						JpaValidationMessages.PERSISTENT_ATTRIBUTE_FINAL_FIELD,
-//						new String[] {attribute.getName()},
-//						attribute, attribute.validationTextRange())
-//				);
-//			}
-//			
-//			if (Flags.isPublic(flags)) {
-//				messages.add(
-//					DefaultJpaValidationMessages.buildMessage(
-//						IMessage.HIGH_SEVERITY,
-//						JpaValidationMessages.PERSISTENT_ATTRIBUTE_PUBLIC_FIELD,
-//						new String[] {attribute.getName()},
-//						attribute, attribute.validationTextRange())
-//				);
-//				
-//			}
-//		}
-//	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualColumn.java
index dbe6d05..be8a6ad 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualColumn.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.java.JavaColumn;
 import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
 import org.eclipse.jpt.core.resource.orm.XmlColumn;
@@ -139,4 +140,12 @@
 	public void update(JavaColumn javaColumn) {
 		this.javaColumn = javaColumn;
 	}
+	
+	public TextRange nameTextRange() {
+		return null;
+	}
+	
+	public TextRange tableTextRange() {
+		return null;
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualJoinColumn.java
index 5914e92..0aee1cb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualJoinColumn.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.context.orm;
 
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.context.java.JavaJoinColumn;
 import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
 import org.eclipse.jpt.core.resource.orm.XmlJoinColumn;
@@ -117,4 +118,16 @@
 		this.javaJoinColumn = javaJoinColumn;
 	}
 
+	public TextRange nameTextRange() {
+		return null;
+	}
+	
+	public TextRange tableTextRange() {
+		return null;
+	}
+	
+	public TextRange referencedColumnNameTextRange() {
+		return null;
+	}
+	
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/GenericJpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/GenericJpaFactory.java
index 1f811f1..9daa4c4 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/GenericJpaFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/GenericJpaFactory.java
@@ -22,13 +22,10 @@
 import org.eclipse.jpt.core.JpaProject;
 import org.eclipse.jpt.core.JptCorePlugin;
 import org.eclipse.jpt.core.ResourceModel;
-import org.eclipse.jpt.core.context.AbstractJoinColumn;
 import org.eclipse.jpt.core.context.AssociationOverride;
 import org.eclipse.jpt.core.context.AttributeOverride;
 import org.eclipse.jpt.core.context.BaseJpaContent;
-import org.eclipse.jpt.core.context.JoinColumn;
 import org.eclipse.jpt.core.context.JpaContextNode;
-import org.eclipse.jpt.core.context.NamedColumn;
 import org.eclipse.jpt.core.context.java.JavaAbstractJoinColumn;
 import org.eclipse.jpt.core.context.java.JavaAssociationOverride;
 import org.eclipse.jpt.core.context.java.JavaAttributeMapping;
@@ -67,6 +64,7 @@
 import org.eclipse.jpt.core.context.java.JavaTypeMapping;
 import org.eclipse.jpt.core.context.java.JavaVersionMapping;
 import org.eclipse.jpt.core.context.orm.EntityMappings;
+import org.eclipse.jpt.core.context.orm.OrmAbstractJoinColumn;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
 import org.eclipse.jpt.core.context.orm.OrmAttributeMapping;
 import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
@@ -85,6 +83,7 @@
 import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping;
 import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping;
 import org.eclipse.jpt.core.context.orm.OrmMappedSuperclass;
+import org.eclipse.jpt.core.context.orm.OrmNamedColumn;
 import org.eclipse.jpt.core.context.orm.OrmNamedNativeQuery;
 import org.eclipse.jpt.core.context.orm.OrmNamedQuery;
 import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
@@ -312,11 +311,11 @@
 	public PersistenceXml buildPersistenceXml(BaseJpaContent parent, PersistenceResource persistenceResource) {
 		return new GenericPersistenceXml(parent, persistenceResource);
 	}
-
+	
 	public OrmXml buildOrmXml(MappingFileRef parent, OrmResource ormResource) {
 		return new OrmXmlImpl(parent, ormResource);
 	}
-
+	
 	public EntityMappings buildEntityMappings(OrmXml parent, XmlEntityMappings xmlEntityMappings) {
 		return new GenericEntityMappings(parent, xmlEntityMappings);
 	}
@@ -509,7 +508,7 @@
 		return new GenericOrmSecondaryTable(parent);
 	}
 	
-	public OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, AbstractJoinColumn.Owner owner) {
+	public OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(OrmJpaContextNode parent, OrmAbstractJoinColumn.Owner owner) {
 		return new GenericOrmPrimaryKeyJoinColumn(parent, owner);
 	}
 	
@@ -517,7 +516,7 @@
 		return new GenericOrmJoinTable(parent);
 	}
 	
-	public OrmJoinColumn buildOrmJoinColumn(OrmJpaContextNode parent, JoinColumn.Owner owner) {
+	public OrmJoinColumn buildOrmJoinColumn(OrmJpaContextNode parent, OrmJoinColumn.Owner owner) {
 		return new GenericOrmJoinColumn(parent, owner);
 	}
 	
@@ -529,7 +528,7 @@
 		return new GenericOrmAssociationOverride(parent, owner, xmlAssociationOverride);
 	}
 	
-	public OrmDiscriminatorColumn buildOrmDiscriminatorColumn(OrmEntity parent, NamedColumn.Owner owner) {
+	public OrmDiscriminatorColumn buildOrmDiscriminatorColumn(OrmEntity parent, OrmNamedColumn.Owner owner) {
 		return new GenericOrmDiscriminatorColumn(parent, owner);
 	}
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlAbstractColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlAbstractColumn.java
new file mode 100644
index 0000000..23c4131
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlAbstractColumn.java
@@ -0,0 +1,518 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ * 
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.resource.orm;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
+import org.eclipse.jpt.core.internal.resource.orm.translators.OrmXmlMapper;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Xml Abstract Column</b></em>'.
+ *
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlAbstractColumn()
+ * @model kind="class" abstract="true"
+ * @generated
+ */
+public abstract class AbstractXmlAbstractColumn extends AbstractXmlNamedColumn implements XmlAbstractColumn
+{
+	/**
+	 * The default value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInsertable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean INSERTABLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInsertable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean insertable = INSERTABLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNullable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean NULLABLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNullable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean nullable = NULLABLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTable() <em>Table</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TABLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTable() <em>Table</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTable()
+	 * @generated
+	 * @ordered
+	 */
+	protected String table = TABLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getUnique() <em>Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUnique()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean UNIQUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUnique() <em>Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUnique()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean unique = UNIQUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUpdatable()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Boolean UPDATABLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUpdatable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Boolean updatable = UPDATABLE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbstractXmlAbstractColumn()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return OrmPackage.Literals.ABSTRACT_XML_ABSTRACT_COLUMN;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Insertable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Insertable</em>' attribute.
+	 * @see #setInsertable(Boolean)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Insertable()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
+	 * @generated
+	 */
+	public Boolean getInsertable()
+	{
+		return insertable;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn#getInsertable <em>Insertable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Insertable</em>' attribute.
+	 * @see #getInsertable()
+	 * @generated
+	 */
+	public void setInsertable(Boolean newInsertable)
+	{
+		Boolean oldInsertable = insertable;
+		insertable = newInsertable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE, oldInsertable, insertable));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Nullable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Nullable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Nullable</em>' attribute.
+	 * @see #setNullable(Boolean)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Nullable()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
+	 * @generated
+	 */
+	public Boolean getNullable()
+	{
+		return nullable;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn#getNullable <em>Nullable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Nullable</em>' attribute.
+	 * @see #getNullable()
+	 * @generated
+	 */
+	public void setNullable(Boolean newNullable)
+	{
+		Boolean oldNullable = nullable;
+		nullable = newNullable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE, oldNullable, nullable));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Table</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Table</em>' attribute.
+	 * @see #setTable(String)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Table()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getTable()
+	{
+		return table;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn#getTable <em>Table</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Table</em>' attribute.
+	 * @see #getTable()
+	 * @generated
+	 */
+	public void setTable(String newTable)
+	{
+		String oldTable = table;
+		table = newTable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE, oldTable, table));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Unique</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Unique</em>' attribute.
+	 * @see #setUnique(Boolean)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Unique()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
+	 * @generated
+	 */
+	public Boolean getUnique()
+	{
+		return unique;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn#getUnique <em>Unique</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Unique</em>' attribute.
+	 * @see #getUnique()
+	 * @generated
+	 */
+	public void setUnique(Boolean newUnique)
+	{
+		Boolean oldUnique = unique;
+		unique = newUnique;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE, oldUnique, unique));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Updatable</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Updatable</em>' attribute.
+	 * @see #setUpdatable(Boolean)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Updatable()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
+	 * @generated
+	 */
+	public Boolean getUpdatable()
+	{
+		return updatable;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn#getUpdatable <em>Updatable</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Updatable</em>' attribute.
+	 * @see #getUpdatable()
+	 * @generated
+	 */
+	public void setUpdatable(Boolean newUpdatable)
+	{
+		Boolean oldUpdatable = updatable;
+		updatable = newUpdatable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE, oldUpdatable, updatable));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE:
+				return getInsertable();
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE:
+				return getNullable();
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE:
+				return getTable();
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE:
+				return getUnique();
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE:
+				return getUpdatable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE:
+				setInsertable((Boolean)newValue);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE:
+				setNullable((Boolean)newValue);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE:
+				setTable((String)newValue);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE:
+				setUnique((Boolean)newValue);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE:
+				setUpdatable((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE:
+				setInsertable(INSERTABLE_EDEFAULT);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE:
+				setNullable(NULLABLE_EDEFAULT);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE:
+				setTable(TABLE_EDEFAULT);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE:
+				setUnique(UNIQUE_EDEFAULT);
+				return;
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE:
+				setUpdatable(UPDATABLE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE:
+				return INSERTABLE_EDEFAULT == null ? insertable != null : !INSERTABLE_EDEFAULT.equals(insertable);
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE:
+				return NULLABLE_EDEFAULT == null ? nullable != null : !NULLABLE_EDEFAULT.equals(nullable);
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE:
+				return TABLE_EDEFAULT == null ? table != null : !TABLE_EDEFAULT.equals(table);
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE:
+				return UNIQUE_EDEFAULT == null ? unique != null : !UNIQUE_EDEFAULT.equals(unique);
+			case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE:
+				return UPDATABLE_EDEFAULT == null ? updatable != null : !UPDATABLE_EDEFAULT.equals(updatable);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlAbstractColumn.class)
+		{
+			switch (derivedFeatureID)
+			{
+				case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE: return OrmPackage.XML_ABSTRACT_COLUMN__INSERTABLE;
+				case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE: return OrmPackage.XML_ABSTRACT_COLUMN__NULLABLE;
+				case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE: return OrmPackage.XML_ABSTRACT_COLUMN__TABLE;
+				case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE: return OrmPackage.XML_ABSTRACT_COLUMN__UNIQUE;
+				case OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE: return OrmPackage.XML_ABSTRACT_COLUMN__UPDATABLE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlAbstractColumn.class)
+		{
+			switch (baseFeatureID)
+			{
+				case OrmPackage.XML_ABSTRACT_COLUMN__INSERTABLE: return OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE;
+				case OrmPackage.XML_ABSTRACT_COLUMN__NULLABLE: return OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE;
+				case OrmPackage.XML_ABSTRACT_COLUMN__TABLE: return OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__TABLE;
+				case OrmPackage.XML_ABSTRACT_COLUMN__UNIQUE: return OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE;
+				case OrmPackage.XML_ABSTRACT_COLUMN__UPDATABLE: return OrmPackage.ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (insertable: ");
+		result.append(insertable);
+		result.append(", nullable: ");
+		result.append(nullable);
+		result.append(", table: ");
+		result.append(table);
+		result.append(", unique: ");
+		result.append(unique);
+		result.append(", updatable: ");
+		result.append(updatable);
+		result.append(')');
+		return result.toString();
+	}
+
+	public TextRange tableTextRange() {
+		IDOMNode tableNode = (IDOMNode) DOMUtilities.getChildAttributeNode(this.node, OrmXmlMapper.TABLE);
+		return (tableNode == null) ? validationTextRange() : buildTextRange(tableNode);
+	}
+} // AbstractXmlAbstractColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlNamedColumn.java
new file mode 100644
index 0000000..29a3d69
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/AbstractXmlNamedColumn.java
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ * 
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.core.resource.orm;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
+import org.eclipse.jpt.core.internal.resource.orm.translators.OrmXmlMapper;
+import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Xml Named Column</b></em>'.
+ *
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlNamedColumn()
+ * @model kind="class" abstract="true"
+ * @generated
+ */
+public abstract class AbstractXmlNamedColumn extends AbstractJpaEObject implements XmlNamedColumn
+{
+	/**
+	 * The default value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getColumnDefinition()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String COLUMN_DEFINITION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getColumnDefinition()
+	 * @generated
+	 * @ordered
+	 */
+	protected String columnDefinition = COLUMN_DEFINITION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbstractXmlNamedColumn()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return OrmPackage.Literals.ABSTRACT_XML_NAMED_COLUMN;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Column Definition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Column Definition</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Column Definition</em>' attribute.
+	 * @see #setColumnDefinition(String)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_ColumnDefinition()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getColumnDefinition()
+	{
+		return columnDefinition;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn#getColumnDefinition <em>Column Definition</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Column Definition</em>' attribute.
+	 * @see #getColumnDefinition()
+	 * @generated
+	 */
+	public void setColumnDefinition(String newColumnDefinition)
+	{
+		String oldColumnDefinition = columnDefinition;
+		columnDefinition = newColumnDefinition;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION, oldColumnDefinition, columnDefinition));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_Name()
+	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getName()
+	{
+		return name;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	public void setName(String newName)
+	{
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.ABSTRACT_XML_NAMED_COLUMN__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION:
+				return getColumnDefinition();
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION:
+				setColumnDefinition((String)newValue);
+				return;
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION:
+				setColumnDefinition(COLUMN_DEFINITION_EDEFAULT);
+				return;
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION:
+				return COLUMN_DEFINITION_EDEFAULT == null ? columnDefinition != null : !COLUMN_DEFINITION_EDEFAULT.equals(columnDefinition);
+			case OrmPackage.ABSTRACT_XML_NAMED_COLUMN__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (columnDefinition: ");
+		result.append(columnDefinition);
+		result.append(", name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+	
+	public TextRange nameTextRange() {
+		IDOMNode nameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(this.node, OrmXmlMapper.NAME);
+		return (nameNode == null) ? validationTextRange() : buildTextRange(nameNode);
+	}
+
+} // AbstractXmlNamedColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/ColumnImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/ColumnImpl.java
index d2a25c3..8e87d53 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/ColumnImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/ColumnImpl.java
@@ -12,7 +12,6 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
 
 /**
  * <!-- begin-user-doc -->
@@ -30,149 +29,9 @@
  * @model kind="class"
  * @generated
  */
-public class ColumnImpl extends AbstractJpaEObject implements XmlColumn
+public class ColumnImpl extends AbstractXmlAbstractColumn implements XmlColumn
 {
 	/**
-	 * The default value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String COLUMN_DEFINITION_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected String columnDefinition = COLUMN_DEFINITION_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getInsertable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean INSERTABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getInsertable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean insertable = INSERTABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNullable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean NULLABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNullable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean nullable = NULLABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getTable() <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String TABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getTable() <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTable()
-	 * @generated
-	 * @ordered
-	 */
-	protected String table = TABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getUnique() <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUnique()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean UNIQUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getUnique() <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUnique()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean unique = UNIQUE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUpdatable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean UPDATABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUpdatable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean updatable = UPDATABLE_EDEFAULT;
-
-	/**
 	 * The default value of the '{@link #getLength() <em>Length</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -254,251 +113,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Column Definition</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Column Definition</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Column Definition</em>' attribute.
-	 * @see #setColumnDefinition(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_ColumnDefinition()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getColumnDefinition()
-	{
-		return columnDefinition;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getColumnDefinition <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Column Definition</em>' attribute.
-	 * @see #getColumnDefinition()
-	 * @generated
-	 */
-	public void setColumnDefinition(String newColumnDefinition)
-	{
-		String oldColumnDefinition = columnDefinition;
-		columnDefinition = newColumnDefinition;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__COLUMN_DEFINITION, oldColumnDefinition, columnDefinition));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_Name()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getName()
-	{
-		return name;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-	public void setName(String newName)
-	{
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__NAME, oldName, name));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Insertable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Insertable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Insertable</em>' attribute.
-	 * @see #setInsertable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Insertable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getInsertable()
-	{
-		return insertable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getInsertable <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Insertable</em>' attribute.
-	 * @see #getInsertable()
-	 * @generated
-	 */
-	public void setInsertable(Boolean newInsertable)
-	{
-		Boolean oldInsertable = insertable;
-		insertable = newInsertable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__INSERTABLE, oldInsertable, insertable));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Nullable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Nullable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Nullable</em>' attribute.
-	 * @see #setNullable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Nullable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getNullable()
-	{
-		return nullable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getNullable <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Nullable</em>' attribute.
-	 * @see #getNullable()
-	 * @generated
-	 */
-	public void setNullable(Boolean newNullable)
-	{
-		Boolean oldNullable = nullable;
-		nullable = newNullable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__NULLABLE, oldNullable, nullable));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Table</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Table</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Table</em>' attribute.
-	 * @see #setTable(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Table()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getTable()
-	{
-		return table;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getTable <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Table</em>' attribute.
-	 * @see #getTable()
-	 * @generated
-	 */
-	public void setTable(String newTable)
-	{
-		String oldTable = table;
-		table = newTable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__TABLE, oldTable, table));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Unique</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Unique</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Unique</em>' attribute.
-	 * @see #setUnique(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Unique()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getUnique()
-	{
-		return unique;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getUnique <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Unique</em>' attribute.
-	 * @see #getUnique()
-	 * @generated
-	 */
-	public void setUnique(Boolean newUnique)
-	{
-		Boolean oldUnique = unique;
-		unique = newUnique;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__UNIQUE, oldUnique, unique));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Updatable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Updatable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Updatable</em>' attribute.
-	 * @see #setUpdatable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Updatable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getUpdatable()
-	{
-		return updatable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.ColumnImpl#getUpdatable <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Updatable</em>' attribute.
-	 * @see #getUpdatable()
-	 * @generated
-	 */
-	public void setUpdatable(Boolean newUpdatable)
-	{
-		Boolean oldUpdatable = updatable;
-		updatable = newUpdatable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.COLUMN_IMPL__UPDATABLE, oldUpdatable, updatable));
-	}
-
-	/**
 	 * Returns the value of the '<em><b>Length</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -613,20 +227,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.COLUMN_IMPL__COLUMN_DEFINITION:
-				return getColumnDefinition();
-			case OrmPackage.COLUMN_IMPL__NAME:
-				return getName();
-			case OrmPackage.COLUMN_IMPL__INSERTABLE:
-				return getInsertable();
-			case OrmPackage.COLUMN_IMPL__NULLABLE:
-				return getNullable();
-			case OrmPackage.COLUMN_IMPL__TABLE:
-				return getTable();
-			case OrmPackage.COLUMN_IMPL__UNIQUE:
-				return getUnique();
-			case OrmPackage.COLUMN_IMPL__UPDATABLE:
-				return getUpdatable();
 			case OrmPackage.COLUMN_IMPL__LENGTH:
 				return getLength();
 			case OrmPackage.COLUMN_IMPL__PRECISION:
@@ -647,27 +247,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.COLUMN_IMPL__COLUMN_DEFINITION:
-				setColumnDefinition((String)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__NAME:
-				setName((String)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__INSERTABLE:
-				setInsertable((Boolean)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__NULLABLE:
-				setNullable((Boolean)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__TABLE:
-				setTable((String)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__UNIQUE:
-				setUnique((Boolean)newValue);
-				return;
-			case OrmPackage.COLUMN_IMPL__UPDATABLE:
-				setUpdatable((Boolean)newValue);
-				return;
 			case OrmPackage.COLUMN_IMPL__LENGTH:
 				setLength((Integer)newValue);
 				return;
@@ -691,27 +270,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.COLUMN_IMPL__COLUMN_DEFINITION:
-				setColumnDefinition(COLUMN_DEFINITION_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__NAME:
-				setName(NAME_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__INSERTABLE:
-				setInsertable(INSERTABLE_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__NULLABLE:
-				setNullable(NULLABLE_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__TABLE:
-				setTable(TABLE_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__UNIQUE:
-				setUnique(UNIQUE_EDEFAULT);
-				return;
-			case OrmPackage.COLUMN_IMPL__UPDATABLE:
-				setUpdatable(UPDATABLE_EDEFAULT);
-				return;
 			case OrmPackage.COLUMN_IMPL__LENGTH:
 				setLength(LENGTH_EDEFAULT);
 				return;
@@ -735,20 +293,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.COLUMN_IMPL__COLUMN_DEFINITION:
-				return COLUMN_DEFINITION_EDEFAULT == null ? columnDefinition != null : !COLUMN_DEFINITION_EDEFAULT.equals(columnDefinition);
-			case OrmPackage.COLUMN_IMPL__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-			case OrmPackage.COLUMN_IMPL__INSERTABLE:
-				return INSERTABLE_EDEFAULT == null ? insertable != null : !INSERTABLE_EDEFAULT.equals(insertable);
-			case OrmPackage.COLUMN_IMPL__NULLABLE:
-				return NULLABLE_EDEFAULT == null ? nullable != null : !NULLABLE_EDEFAULT.equals(nullable);
-			case OrmPackage.COLUMN_IMPL__TABLE:
-				return TABLE_EDEFAULT == null ? table != null : !TABLE_EDEFAULT.equals(table);
-			case OrmPackage.COLUMN_IMPL__UNIQUE:
-				return UNIQUE_EDEFAULT == null ? unique != null : !UNIQUE_EDEFAULT.equals(unique);
-			case OrmPackage.COLUMN_IMPL__UPDATABLE:
-				return UPDATABLE_EDEFAULT == null ? updatable != null : !UPDATABLE_EDEFAULT.equals(updatable);
 			case OrmPackage.COLUMN_IMPL__LENGTH:
 				return LENGTH_EDEFAULT == null ? length != null : !LENGTH_EDEFAULT.equals(length);
 			case OrmPackage.COLUMN_IMPL__PRECISION:
@@ -765,26 +309,54 @@
 	 * @generated
 	 */
 	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlColumn.class)
+		{
+			switch (derivedFeatureID)
+			{
+				case OrmPackage.COLUMN_IMPL__LENGTH: return OrmPackage.XML_COLUMN__LENGTH;
+				case OrmPackage.COLUMN_IMPL__PRECISION: return OrmPackage.XML_COLUMN__PRECISION;
+				case OrmPackage.COLUMN_IMPL__SCALE: return OrmPackage.XML_COLUMN__SCALE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlColumn.class)
+		{
+			switch (baseFeatureID)
+			{
+				case OrmPackage.XML_COLUMN__LENGTH: return OrmPackage.COLUMN_IMPL__LENGTH;
+				case OrmPackage.XML_COLUMN__PRECISION: return OrmPackage.COLUMN_IMPL__PRECISION;
+				case OrmPackage.XML_COLUMN__SCALE: return OrmPackage.COLUMN_IMPL__SCALE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public String toString()
 	{
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (columnDefinition: ");
-		result.append(columnDefinition);
-		result.append(", name: ");
-		result.append(name);
-		result.append(", insertable: ");
-		result.append(insertable);
-		result.append(", nullable: ");
-		result.append(nullable);
-		result.append(", table: ");
-		result.append(table);
-		result.append(", unique: ");
-		result.append(unique);
-		result.append(", updatable: ");
-		result.append(updatable);
-		result.append(", length: ");
+		result.append(" (length: ");
 		result.append(length);
 		result.append(", precision: ");
 		result.append(precision);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/JoinColumnImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/JoinColumnImpl.java
index fbf8140..e49b8f6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/JoinColumnImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/JoinColumnImpl.java
@@ -12,7 +12,10 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
+import org.eclipse.jpt.core.internal.resource.orm.translators.OrmXmlMapper;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 
 /**
  * <!-- begin-user-doc -->
@@ -30,149 +33,9 @@
  * @model kind="class"
  * @generated
  */
-public class JoinColumnImpl extends AbstractJpaEObject implements XmlJoinColumn
+public class JoinColumnImpl extends AbstractXmlAbstractColumn implements XmlJoinColumn
 {
 	/**
-	 * The default value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String COLUMN_DEFINITION_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected String columnDefinition = COLUMN_DEFINITION_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getInsertable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean INSERTABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getInsertable() <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getInsertable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean insertable = INSERTABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNullable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean NULLABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getNullable() <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNullable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean nullable = NULLABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getTable() <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String TABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getTable() <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTable()
-	 * @generated
-	 * @ordered
-	 */
-	protected String table = TABLE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getUnique() <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUnique()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean UNIQUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getUnique() <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUnique()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean unique = UNIQUE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUpdatable()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final Boolean UPDATABLE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getUpdatable() <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUpdatable()
-	 * @generated
-	 * @ordered
-	 */
-	protected Boolean updatable = UPDATABLE_EDEFAULT;
-
-	/**
 	 * The default value of the '{@link #getReferencedColumnName() <em>Referenced Column Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -214,251 +77,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_Name()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getName()
-	{
-		return name;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-	public void setName(String newName)
-	{
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__NAME, oldName, name));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Insertable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Insertable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Insertable</em>' attribute.
-	 * @see #setInsertable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Insertable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getInsertable()
-	{
-		return insertable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getInsertable <em>Insertable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Insertable</em>' attribute.
-	 * @see #getInsertable()
-	 * @generated
-	 */
-	public void setInsertable(Boolean newInsertable)
-	{
-		Boolean oldInsertable = insertable;
-		insertable = newInsertable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__INSERTABLE, oldInsertable, insertable));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Nullable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Nullable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Nullable</em>' attribute.
-	 * @see #setNullable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Nullable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getNullable()
-	{
-		return nullable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getNullable <em>Nullable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Nullable</em>' attribute.
-	 * @see #getNullable()
-	 * @generated
-	 */
-	public void setNullable(Boolean newNullable)
-	{
-		Boolean oldNullable = nullable;
-		nullable = newNullable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__NULLABLE, oldNullable, nullable));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Column Definition</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Column Definition</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Column Definition</em>' attribute.
-	 * @see #setColumnDefinition(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_ColumnDefinition()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getColumnDefinition()
-	{
-		return columnDefinition;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getColumnDefinition <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Column Definition</em>' attribute.
-	 * @see #getColumnDefinition()
-	 * @generated
-	 */
-	public void setColumnDefinition(String newColumnDefinition)
-	{
-		String oldColumnDefinition = columnDefinition;
-		columnDefinition = newColumnDefinition;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__COLUMN_DEFINITION, oldColumnDefinition, columnDefinition));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Table</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Table</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Table</em>' attribute.
-	 * @see #setTable(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Table()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getTable()
-	{
-		return table;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getTable <em>Table</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Table</em>' attribute.
-	 * @see #getTable()
-	 * @generated
-	 */
-	public void setTable(String newTable)
-	{
-		String oldTable = table;
-		table = newTable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__TABLE, oldTable, table));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Unique</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Unique</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Unique</em>' attribute.
-	 * @see #setUnique(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Unique()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getUnique()
-	{
-		return unique;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getUnique <em>Unique</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Unique</em>' attribute.
-	 * @see #getUnique()
-	 * @generated
-	 */
-	public void setUnique(Boolean newUnique)
-	{
-		Boolean oldUnique = unique;
-		unique = newUnique;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__UNIQUE, oldUnique, unique));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Updatable</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Updatable</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Updatable</em>' attribute.
-	 * @see #setUpdatable(Boolean)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn_Updatable()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.BooleanObject"
-	 * @generated
-	 */
-	public Boolean getUpdatable()
-	{
-		return updatable;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.JoinColumnImpl#getUpdatable <em>Updatable</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Updatable</em>' attribute.
-	 * @see #getUpdatable()
-	 * @generated
-	 */
-	public void setUpdatable(Boolean newUpdatable)
-	{
-		Boolean oldUpdatable = updatable;
-		updatable = newUpdatable;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.JOIN_COLUMN_IMPL__UPDATABLE, oldUpdatable, updatable));
-	}
-
-	/**
 	 * Returns the value of the '<em><b>Referenced Column Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -503,20 +121,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.JOIN_COLUMN_IMPL__COLUMN_DEFINITION:
-				return getColumnDefinition();
-			case OrmPackage.JOIN_COLUMN_IMPL__NAME:
-				return getName();
-			case OrmPackage.JOIN_COLUMN_IMPL__INSERTABLE:
-				return getInsertable();
-			case OrmPackage.JOIN_COLUMN_IMPL__NULLABLE:
-				return getNullable();
-			case OrmPackage.JOIN_COLUMN_IMPL__TABLE:
-				return getTable();
-			case OrmPackage.JOIN_COLUMN_IMPL__UNIQUE:
-				return getUnique();
-			case OrmPackage.JOIN_COLUMN_IMPL__UPDATABLE:
-				return getUpdatable();
 			case OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME:
 				return getReferencedColumnName();
 		}
@@ -533,27 +137,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.JOIN_COLUMN_IMPL__COLUMN_DEFINITION:
-				setColumnDefinition((String)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__NAME:
-				setName((String)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__INSERTABLE:
-				setInsertable((Boolean)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__NULLABLE:
-				setNullable((Boolean)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__TABLE:
-				setTable((String)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__UNIQUE:
-				setUnique((Boolean)newValue);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__UPDATABLE:
-				setUpdatable((Boolean)newValue);
-				return;
 			case OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME:
 				setReferencedColumnName((String)newValue);
 				return;
@@ -571,27 +154,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.JOIN_COLUMN_IMPL__COLUMN_DEFINITION:
-				setColumnDefinition(COLUMN_DEFINITION_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__NAME:
-				setName(NAME_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__INSERTABLE:
-				setInsertable(INSERTABLE_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__NULLABLE:
-				setNullable(NULLABLE_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__TABLE:
-				setTable(TABLE_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__UNIQUE:
-				setUnique(UNIQUE_EDEFAULT);
-				return;
-			case OrmPackage.JOIN_COLUMN_IMPL__UPDATABLE:
-				setUpdatable(UPDATABLE_EDEFAULT);
-				return;
 			case OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME:
 				setReferencedColumnName(REFERENCED_COLUMN_NAME_EDEFAULT);
 				return;
@@ -609,20 +171,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.JOIN_COLUMN_IMPL__COLUMN_DEFINITION:
-				return COLUMN_DEFINITION_EDEFAULT == null ? columnDefinition != null : !COLUMN_DEFINITION_EDEFAULT.equals(columnDefinition);
-			case OrmPackage.JOIN_COLUMN_IMPL__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-			case OrmPackage.JOIN_COLUMN_IMPL__INSERTABLE:
-				return INSERTABLE_EDEFAULT == null ? insertable != null : !INSERTABLE_EDEFAULT.equals(insertable);
-			case OrmPackage.JOIN_COLUMN_IMPL__NULLABLE:
-				return NULLABLE_EDEFAULT == null ? nullable != null : !NULLABLE_EDEFAULT.equals(nullable);
-			case OrmPackage.JOIN_COLUMN_IMPL__TABLE:
-				return TABLE_EDEFAULT == null ? table != null : !TABLE_EDEFAULT.equals(table);
-			case OrmPackage.JOIN_COLUMN_IMPL__UNIQUE:
-				return UNIQUE_EDEFAULT == null ? unique != null : !UNIQUE_EDEFAULT.equals(unique);
-			case OrmPackage.JOIN_COLUMN_IMPL__UPDATABLE:
-				return UPDATABLE_EDEFAULT == null ? updatable != null : !UPDATABLE_EDEFAULT.equals(updatable);
 			case OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME:
 				return REFERENCED_COLUMN_NAME_EDEFAULT == null ? referencedColumnName != null : !REFERENCED_COLUMN_NAME_EDEFAULT.equals(referencedColumnName);
 		}
@@ -635,29 +183,57 @@
 	 * @generated
 	 */
 	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlJoinColumn.class)
+		{
+			switch (derivedFeatureID)
+			{
+				case OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME: return OrmPackage.XML_JOIN_COLUMN__REFERENCED_COLUMN_NAME;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+	{
+		if (baseClass == XmlJoinColumn.class)
+		{
+			switch (baseFeatureID)
+			{
+				case OrmPackage.XML_JOIN_COLUMN__REFERENCED_COLUMN_NAME: return OrmPackage.JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public String toString()
 	{
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (columnDefinition: ");
-		result.append(columnDefinition);
-		result.append(", name: ");
-		result.append(name);
-		result.append(", insertable: ");
-		result.append(insertable);
-		result.append(", nullable: ");
-		result.append(nullable);
-		result.append(", table: ");
-		result.append(table);
-		result.append(", unique: ");
-		result.append(unique);
-		result.append(", updatable: ");
-		result.append(updatable);
-		result.append(", referencedColumnName: ");
+		result.append(" (referencedColumnName: ");
 		result.append(referencedColumnName);
 		result.append(')');
 		return result.toString();
 	}
-
+	
+	public TextRange referencedColumnNameTextRange() {
+		IDOMNode referencedColumnNameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(this.node, OrmXmlMapper.REFERENCED_COLUMN_NAME);
+		return (referencedColumnNameNode == null) ? validationTextRange() : buildTextRange(referencedColumnNameNode);
+	}
 } // JoinColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/OrmPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/OrmPackage.java
index 79e3d21..ac32b0c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/OrmPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/OrmPackage.java
@@ -2970,6 +2970,43 @@
 	public static final int XML_NAMED_COLUMN_FEATURE_COUNT = 2;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn <em>Abstract Xml Named Column</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlNamedColumn()
+	 * @generated
+	 */
+	public static final int ABSTRACT_XML_NAMED_COLUMN = 40;
+
+	/**
+	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION = XML_NAMED_COLUMN__COLUMN_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_NAMED_COLUMN__NAME = XML_NAMED_COLUMN__NAME;
+
+	/**
+	 * The number of structural features of the '<em>Abstract Xml Named Column</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT = XML_NAMED_COLUMN_FEATURE_COUNT + 0;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.XmlAbstractColumn <em>Xml Abstract Column</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2977,7 +3014,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlAbstractColumn()
 	 * @generated
 	 */
-	public static final int XML_ABSTRACT_COLUMN = 40;
+	public static final int XML_ABSTRACT_COLUMN = 41;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3052,6 +3089,88 @@
 	public static final int XML_ABSTRACT_COLUMN_FEATURE_COUNT = XML_NAMED_COLUMN_FEATURE_COUNT + 5;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn <em>Abstract Xml Abstract Column</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn
+	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlAbstractColumn()
+	 * @generated
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN = 42;
+
+	/**
+	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__COLUMN_DEFINITION = ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__NAME = ABSTRACT_XML_NAMED_COLUMN__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Nullable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__TABLE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Unique</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Abstract Xml Abstract Column</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 5;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.XmlColumn <em>Xml Column</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3059,7 +3178,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlColumn()
 	 * @generated
 	 */
-	public static final int XML_COLUMN = 41;
+	public static final int XML_COLUMN = 43;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3168,7 +3287,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getColumnImpl()
 	 * @generated
 	 */
-	public static final int COLUMN_IMPL = 42;
+	public static final int COLUMN_IMPL = 44;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3177,7 +3296,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__COLUMN_DEFINITION = XML_COLUMN__COLUMN_DEFINITION;
+	public static final int COLUMN_IMPL__COLUMN_DEFINITION = ABSTRACT_XML_ABSTRACT_COLUMN__COLUMN_DEFINITION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3186,7 +3305,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__NAME = XML_COLUMN__NAME;
+	public static final int COLUMN_IMPL__NAME = ABSTRACT_XML_ABSTRACT_COLUMN__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
@@ -3195,7 +3314,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__INSERTABLE = XML_COLUMN__INSERTABLE;
+	public static final int COLUMN_IMPL__INSERTABLE = ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE;
 
 	/**
 	 * The feature id for the '<em><b>Nullable</b></em>' attribute.
@@ -3204,7 +3323,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__NULLABLE = XML_COLUMN__NULLABLE;
+	public static final int COLUMN_IMPL__NULLABLE = ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE;
 
 	/**
 	 * The feature id for the '<em><b>Table</b></em>' attribute.
@@ -3213,7 +3332,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__TABLE = XML_COLUMN__TABLE;
+	public static final int COLUMN_IMPL__TABLE = ABSTRACT_XML_ABSTRACT_COLUMN__TABLE;
 
 	/**
 	 * The feature id for the '<em><b>Unique</b></em>' attribute.
@@ -3222,7 +3341,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__UNIQUE = XML_COLUMN__UNIQUE;
+	public static final int COLUMN_IMPL__UNIQUE = ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE;
 
 	/**
 	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
@@ -3231,7 +3350,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__UPDATABLE = XML_COLUMN__UPDATABLE;
+	public static final int COLUMN_IMPL__UPDATABLE = ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE;
 
 	/**
 	 * The feature id for the '<em><b>Length</b></em>' attribute.
@@ -3240,7 +3359,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__LENGTH = XML_COLUMN__LENGTH;
+	public static final int COLUMN_IMPL__LENGTH = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
@@ -3249,7 +3368,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__PRECISION = XML_COLUMN__PRECISION;
+	public static final int COLUMN_IMPL__PRECISION = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -3258,7 +3377,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL__SCALE = XML_COLUMN__SCALE;
+	public static final int COLUMN_IMPL__SCALE = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of structural features of the '<em>Column Impl</em>' class.
@@ -3267,7 +3386,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int COLUMN_IMPL_FEATURE_COUNT = XML_COLUMN_FEATURE_COUNT + 0;
+	public static final int COLUMN_IMPL_FEATURE_COUNT = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.ColumnResult <em>Column Result</em>}' class.
@@ -3277,7 +3396,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getColumnResult()
 	 * @generated
 	 */
-	public static final int COLUMN_RESULT = 43;
+	public static final int COLUMN_RESULT = 45;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3305,7 +3424,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlDiscriminatorColumn()
 	 * @generated
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN = 44;
+	public static final int XML_DISCRIMINATOR_COLUMN = 46;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3314,7 +3433,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION = XML_NAMED_COLUMN__COLUMN_DEFINITION;
+	public static final int XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION = ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3323,7 +3442,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN__NAME = XML_NAMED_COLUMN__NAME;
+	public static final int XML_DISCRIMINATOR_COLUMN__NAME = ABSTRACT_XML_NAMED_COLUMN__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Discriminator Type</b></em>' attribute.
@@ -3332,7 +3451,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE = XML_NAMED_COLUMN_FEATURE_COUNT + 0;
+	public static final int XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Length</b></em>' attribute.
@@ -3341,7 +3460,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN__LENGTH = XML_NAMED_COLUMN_FEATURE_COUNT + 1;
+	public static final int XML_DISCRIMINATOR_COLUMN__LENGTH = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 1;
 
 	/**
 	 * The number of structural features of the '<em>Xml Discriminator Column</em>' class.
@@ -3350,7 +3469,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_DISCRIMINATOR_COLUMN_FEATURE_COUNT = XML_NAMED_COLUMN_FEATURE_COUNT + 2;
+	public static final int XML_DISCRIMINATOR_COLUMN_FEATURE_COUNT = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 2;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.EntityListeners <em>Entity Listeners</em>}' class.
@@ -3360,7 +3479,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEntityListeners()
 	 * @generated
 	 */
-	public static final int ENTITY_LISTENERS = 45;
+	public static final int ENTITY_LISTENERS = 47;
 
 	/**
 	 * The feature id for the '<em><b>Entity Listeners</b></em>' containment reference list.
@@ -3388,7 +3507,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEntityListener()
 	 * @generated
 	 */
-	public static final int ENTITY_LISTENER = 46;
+	public static final int ENTITY_LISTENER = 48;
 
 	/**
 	 * The feature id for the '<em><b>Class Name</b></em>' attribute.
@@ -3479,7 +3598,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEntityResult()
 	 * @generated
 	 */
-	public static final int ENTITY_RESULT = 47;
+	public static final int ENTITY_RESULT = 49;
 
 	/**
 	 * The feature id for the '<em><b>Discriminator Column</b></em>' attribute.
@@ -3525,7 +3644,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getFieldResult()
 	 * @generated
 	 */
-	public static final int FIELD_RESULT = 49;
+	public static final int FIELD_RESULT = 51;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.IdClass <em>Id Class</em>}' class.
@@ -3535,7 +3654,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getIdClass()
 	 * @generated
 	 */
-	public static final int ID_CLASS = 52;
+	public static final int ID_CLASS = 54;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.Inheritance <em>Inheritance</em>}' class.
@@ -3545,7 +3664,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getInheritance()
 	 * @generated
 	 */
-	public static final int INHERITANCE = 53;
+	public static final int INHERITANCE = 55;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.Lob <em>Lob</em>}' class.
@@ -3555,7 +3674,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getLob()
 	 * @generated
 	 */
-	public static final int LOB = 58;
+	public static final int LOB = 60;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.MapKey <em>Map Key</em>}' class.
@@ -3565,7 +3684,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getMapKey()
 	 * @generated
 	 */
-	public static final int MAP_KEY = 59;
+	public static final int MAP_KEY = 61;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.EventMethod <em>Event Method</em>}' class.
@@ -3575,7 +3694,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEventMethod()
 	 * @generated
 	 */
-	public static final int EVENT_METHOD = 48;
+	public static final int EVENT_METHOD = 50;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -3630,7 +3749,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlGeneratedValue()
 	 * @generated
 	 */
-	public static final int XML_GENERATED_VALUE = 50;
+	public static final int XML_GENERATED_VALUE = 52;
 
 	/**
 	 * The feature id for the '<em><b>Generator</b></em>' attribute.
@@ -3667,7 +3786,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getGeneratedValueImpl()
 	 * @generated
 	 */
-	public static final int GENERATED_VALUE_IMPL = 51;
+	public static final int GENERATED_VALUE_IMPL = 53;
 
 	/**
 	 * The feature id for the '<em><b>Generator</b></em>' attribute.
@@ -3740,7 +3859,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlJoinColumn()
 	 * @generated
 	 */
-	public static final int XML_JOIN_COLUMN = 54;
+	public static final int XML_JOIN_COLUMN = 56;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3831,7 +3950,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getJoinColumnImpl()
 	 * @generated
 	 */
-	public static final int JOIN_COLUMN_IMPL = 55;
+	public static final int JOIN_COLUMN_IMPL = 57;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -3840,7 +3959,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__COLUMN_DEFINITION = XML_JOIN_COLUMN__COLUMN_DEFINITION;
+	public static final int JOIN_COLUMN_IMPL__COLUMN_DEFINITION = ABSTRACT_XML_ABSTRACT_COLUMN__COLUMN_DEFINITION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3849,7 +3968,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__NAME = XML_JOIN_COLUMN__NAME;
+	public static final int JOIN_COLUMN_IMPL__NAME = ABSTRACT_XML_ABSTRACT_COLUMN__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Insertable</b></em>' attribute.
@@ -3858,7 +3977,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__INSERTABLE = XML_JOIN_COLUMN__INSERTABLE;
+	public static final int JOIN_COLUMN_IMPL__INSERTABLE = ABSTRACT_XML_ABSTRACT_COLUMN__INSERTABLE;
 
 	/**
 	 * The feature id for the '<em><b>Nullable</b></em>' attribute.
@@ -3867,7 +3986,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__NULLABLE = XML_JOIN_COLUMN__NULLABLE;
+	public static final int JOIN_COLUMN_IMPL__NULLABLE = ABSTRACT_XML_ABSTRACT_COLUMN__NULLABLE;
 
 	/**
 	 * The feature id for the '<em><b>Table</b></em>' attribute.
@@ -3876,7 +3995,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__TABLE = XML_JOIN_COLUMN__TABLE;
+	public static final int JOIN_COLUMN_IMPL__TABLE = ABSTRACT_XML_ABSTRACT_COLUMN__TABLE;
 
 	/**
 	 * The feature id for the '<em><b>Unique</b></em>' attribute.
@@ -3885,7 +4004,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__UNIQUE = XML_JOIN_COLUMN__UNIQUE;
+	public static final int JOIN_COLUMN_IMPL__UNIQUE = ABSTRACT_XML_ABSTRACT_COLUMN__UNIQUE;
 
 	/**
 	 * The feature id for the '<em><b>Updatable</b></em>' attribute.
@@ -3894,7 +4013,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__UPDATABLE = XML_JOIN_COLUMN__UPDATABLE;
+	public static final int JOIN_COLUMN_IMPL__UPDATABLE = ABSTRACT_XML_ABSTRACT_COLUMN__UPDATABLE;
 
 	/**
 	 * The feature id for the '<em><b>Referenced Column Name</b></em>' attribute.
@@ -3903,7 +4022,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME = XML_JOIN_COLUMN__REFERENCED_COLUMN_NAME;
+	public static final int JOIN_COLUMN_IMPL__REFERENCED_COLUMN_NAME = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 0;
 
 	/**
 	 * The number of structural features of the '<em>Join Column Impl</em>' class.
@@ -3912,7 +4031,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JOIN_COLUMN_IMPL_FEATURE_COUNT = XML_JOIN_COLUMN_FEATURE_COUNT + 0;
+	public static final int JOIN_COLUMN_IMPL_FEATURE_COUNT = ABSTRACT_XML_ABSTRACT_COLUMN_FEATURE_COUNT + 1;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.XmlBaseTable <em>Xml Base Table</em>}' class.
@@ -3922,7 +4041,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlBaseTable()
 	 * @generated
 	 */
-	public static final int XML_BASE_TABLE = 74;
+	public static final int XML_BASE_TABLE = 76;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3977,7 +4096,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlJoinTable()
 	 * @generated
 	 */
-	public static final int XML_JOIN_TABLE = 56;
+	public static final int XML_JOIN_TABLE = 58;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4050,7 +4169,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlBaseTable()
 	 * @generated
 	 */
-	public static final int ABSTRACT_XML_BASE_TABLE = 73;
+	public static final int ABSTRACT_XML_BASE_TABLE = 75;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4105,7 +4224,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getJoinTableImpl()
 	 * @generated
 	 */
-	public static final int JOIN_TABLE_IMPL = 57;
+	public static final int JOIN_TABLE_IMPL = 59;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4205,7 +4324,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getMapKeyImpl()
 	 * @generated
 	 */
-	public static final int MAP_KEY_IMPL = 60;
+	public static final int MAP_KEY_IMPL = 62;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4233,7 +4352,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlQuery()
 	 * @generated
 	 */
-	public static final int XML_QUERY = 61;
+	public static final int XML_QUERY = 63;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4279,7 +4398,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedNativeQuery()
 	 * @generated
 	 */
-	public static final int XML_NAMED_NATIVE_QUERY = 62;
+	public static final int XML_NAMED_NATIVE_QUERY = 64;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4343,7 +4462,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedQuery()
 	 * @generated
 	 */
-	public static final int XML_NAMED_QUERY = 63;
+	public static final int XML_NAMED_QUERY = 65;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4389,7 +4508,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPostLoad()
 	 * @generated
 	 */
-	public static final int POST_LOAD = 64;
+	public static final int POST_LOAD = 66;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4417,7 +4536,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPostPersist()
 	 * @generated
 	 */
-	public static final int POST_PERSIST = 65;
+	public static final int POST_PERSIST = 67;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4445,7 +4564,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPostRemove()
 	 * @generated
 	 */
-	public static final int POST_REMOVE = 66;
+	public static final int POST_REMOVE = 68;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4473,7 +4592,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPostUpdate()
 	 * @generated
 	 */
-	public static final int POST_UPDATE = 67;
+	public static final int POST_UPDATE = 69;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4501,7 +4620,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPrePersist()
 	 * @generated
 	 */
-	public static final int PRE_PERSIST = 68;
+	public static final int PRE_PERSIST = 70;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4529,7 +4648,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPreRemove()
 	 * @generated
 	 */
-	public static final int PRE_REMOVE = 69;
+	public static final int PRE_REMOVE = 71;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4557,7 +4676,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getPreUpdate()
 	 * @generated
 	 */
-	public static final int PRE_UPDATE = 70;
+	public static final int PRE_UPDATE = 72;
 
 	/**
 	 * The feature id for the '<em><b>Method Name</b></em>' attribute.
@@ -4585,7 +4704,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlPrimaryKeyJoinColumn()
 	 * @generated
 	 */
-	public static final int XML_PRIMARY_KEY_JOIN_COLUMN = 71;
+	public static final int XML_PRIMARY_KEY_JOIN_COLUMN = 73;
 
 	/**
 	 * The feature id for the '<em><b>Column Definition</b></em>' attribute.
@@ -4594,7 +4713,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION = XML_NAMED_COLUMN__COLUMN_DEFINITION;
+	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION = ABSTRACT_XML_NAMED_COLUMN__COLUMN_DEFINITION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4603,7 +4722,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__NAME = XML_NAMED_COLUMN__NAME;
+	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__NAME = ABSTRACT_XML_NAMED_COLUMN__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Referenced Column Name</b></em>' attribute.
@@ -4612,7 +4731,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME = XML_NAMED_COLUMN_FEATURE_COUNT + 0;
+	public static final int XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 0;
 
 	/**
 	 * The number of structural features of the '<em>Xml Primary Key Join Column</em>' class.
@@ -4621,7 +4740,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_PRIMARY_KEY_JOIN_COLUMN_FEATURE_COUNT = XML_NAMED_COLUMN_FEATURE_COUNT + 1;
+	public static final int XML_PRIMARY_KEY_JOIN_COLUMN_FEATURE_COUNT = ABSTRACT_XML_NAMED_COLUMN_FEATURE_COUNT + 1;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.XmlQueryHint <em>Xml Query Hint</em>}' class.
@@ -4631,7 +4750,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlQueryHint()
 	 * @generated
 	 */
-	public static final int XML_QUERY_HINT = 72;
+	public static final int XML_QUERY_HINT = 74;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4668,7 +4787,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlTable()
 	 * @generated
 	 */
-	public static final int XML_TABLE = 75;
+	public static final int XML_TABLE = 77;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4723,7 +4842,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlSecondaryTable()
 	 * @generated
 	 */
-	public static final int XML_SECONDARY_TABLE = 76;
+	public static final int XML_SECONDARY_TABLE = 78;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4787,7 +4906,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlGenerator()
 	 * @generated
 	 */
-	public static final int XML_GENERATOR = 77;
+	public static final int XML_GENERATOR = 79;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4833,7 +4952,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlSequenceGenerator()
 	 * @generated
 	 */
-	public static final int XML_SEQUENCE_GENERATOR = 78;
+	public static final int XML_SEQUENCE_GENERATOR = 80;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4888,7 +5007,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getSqlResultSetMapping()
 	 * @generated
 	 */
-	public static final int SQL_RESULT_SET_MAPPING = 80;
+	public static final int SQL_RESULT_SET_MAPPING = 82;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.SequenceGeneratorImpl <em>Sequence Generator Impl</em>}' class.
@@ -4898,7 +5017,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getSequenceGeneratorImpl()
 	 * @generated
 	 */
-	public static final int SEQUENCE_GENERATOR_IMPL = 79;
+	public static final int SEQUENCE_GENERATOR_IMPL = 81;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -4989,7 +5108,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlTableGenerator()
 	 * @generated
 	 */
-	public static final int XML_TABLE_GENERATOR = 81;
+	public static final int XML_TABLE_GENERATOR = 83;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -5098,7 +5217,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getTableGeneratorImpl()
 	 * @generated
 	 */
-	public static final int TABLE_GENERATOR_IMPL = 82;
+	public static final int TABLE_GENERATOR_IMPL = 84;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -5207,7 +5326,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getUniqueConstraint()
 	 * @generated
 	 */
-	public static final int UNIQUE_CONSTRAINT = 83;
+	public static final int UNIQUE_CONSTRAINT = 85;
 
 	/**
 	 * The feature id for the '<em><b>Column Names</b></em>' attribute list.
@@ -5235,7 +5354,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAccessType()
 	 * @generated
 	 */
-	public static final int ACCESS_TYPE = 84;
+	public static final int ACCESS_TYPE = 86;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.DiscriminatorType <em>Discriminator Type</em>}' enum.
@@ -5245,7 +5364,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getDiscriminatorType()
 	 * @generated
 	 */
-	public static final int DISCRIMINATOR_TYPE = 85;
+	public static final int DISCRIMINATOR_TYPE = 87;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.EnumType <em>Enum Type</em>}' enum.
@@ -5255,7 +5374,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEnumType()
 	 * @generated
 	 */
-	public static final int ENUM_TYPE = 86;
+	public static final int ENUM_TYPE = 88;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.FetchType <em>Fetch Type</em>}' enum.
@@ -5265,7 +5384,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getFetchType()
 	 * @generated
 	 */
-	public static final int FETCH_TYPE = 87;
+	public static final int FETCH_TYPE = 89;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.GenerationType <em>Generation Type</em>}' enum.
@@ -5275,7 +5394,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getGenerationType()
 	 * @generated
 	 */
-	public static final int GENERATION_TYPE = 88;
+	public static final int GENERATION_TYPE = 90;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.InheritanceType <em>Inheritance Type</em>}' enum.
@@ -5285,7 +5404,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getInheritanceType()
 	 * @generated
 	 */
-	public static final int INHERITANCE_TYPE = 89;
+	public static final int INHERITANCE_TYPE = 91;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.resource.orm.TemporalType <em>Temporal Type</em>}' enum.
@@ -5295,7 +5414,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getTemporalType()
 	 * @generated
 	 */
-	public static final int TEMPORAL_TYPE = 90;
+	public static final int TEMPORAL_TYPE = 92;
 
 	/**
 	 * The meta object id for the '<em>Discriminator Value</em>' data type.
@@ -5305,7 +5424,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getDiscriminatorValue()
 	 * @generated
 	 */
-	public static final int DISCRIMINATOR_VALUE = 91;
+	public static final int DISCRIMINATOR_VALUE = 93;
 
 	/**
 	 * The meta object id for the '<em>Enumerated</em>' data type.
@@ -5315,7 +5434,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getEnumerated()
 	 * @generated
 	 */
-	public static final int ENUMERATED = 92;
+	public static final int ENUMERATED = 94;
 
 	/**
 	 * The meta object id for the '<em>Order By</em>' data type.
@@ -5325,7 +5444,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getOrderBy()
 	 * @generated
 	 */
-	public static final int ORDER_BY = 93;
+	public static final int ORDER_BY = 95;
 
 	/**
 	 * The meta object id for the '<em>Version Type</em>' data type.
@@ -5335,7 +5454,7 @@
 	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getVersionType()
 	 * @generated
 	 */
-	public static final int VERSION_TYPE = 94;
+	public static final int VERSION_TYPE = 96;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -5622,6 +5741,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass abstractXmlNamedColumnEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass xmlAbstractColumnEClass = null;
 
 	/**
@@ -5629,6 +5755,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass abstractXmlAbstractColumnEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass xmlColumnEClass = null;
 
 	/**
@@ -8279,6 +8412,20 @@
 
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn <em>Abstract Xml Named Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Abstract Xml Named Column</em>'.
+	 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn
+	 * @generated
+	 */
+	public EClass getAbstractXmlNamedColumn()
+	{
+		return abstractXmlNamedColumnEClass;
+	}
+
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.jpt.core.resource.orm.XmlAbstractColumn <em>Xml Abstract Column</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8368,6 +8515,20 @@
 
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn <em>Abstract Xml Abstract Column</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Abstract Xml Abstract Column</em>'.
+	 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn
+	 * @generated
+	 */
+	public EClass getAbstractXmlAbstractColumn()
+	{
+		return abstractXmlAbstractColumnEClass;
+	}
+
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.jpt.core.resource.orm.XmlColumn <em>Xml Column</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -10153,6 +10314,8 @@
 		createEAttribute(xmlNamedColumnEClass, XML_NAMED_COLUMN__COLUMN_DEFINITION);
 		createEAttribute(xmlNamedColumnEClass, XML_NAMED_COLUMN__NAME);
 
+		abstractXmlNamedColumnEClass = createEClass(ABSTRACT_XML_NAMED_COLUMN);
+
 		xmlAbstractColumnEClass = createEClass(XML_ABSTRACT_COLUMN);
 		createEAttribute(xmlAbstractColumnEClass, XML_ABSTRACT_COLUMN__INSERTABLE);
 		createEAttribute(xmlAbstractColumnEClass, XML_ABSTRACT_COLUMN__NULLABLE);
@@ -10160,6 +10323,8 @@
 		createEAttribute(xmlAbstractColumnEClass, XML_ABSTRACT_COLUMN__UNIQUE);
 		createEAttribute(xmlAbstractColumnEClass, XML_ABSTRACT_COLUMN__UPDATABLE);
 
+		abstractXmlAbstractColumnEClass = createEClass(ABSTRACT_XML_ABSTRACT_COLUMN);
+
 		xmlColumnEClass = createEClass(XML_COLUMN);
 		createEAttribute(xmlColumnEClass, XML_COLUMN__LENGTH);
 		createEAttribute(xmlColumnEClass, XML_COLUMN__PRECISION);
@@ -10393,12 +10558,17 @@
 		transientImplEClass.getESuperTypes().add(this.getXmlTransient());
 		attributeOverrideImplEClass.getESuperTypes().add(this.getXmlAttributeOverride());
 		cascadeTypeImplEClass.getESuperTypes().add(this.getCascadeType());
+		abstractXmlNamedColumnEClass.getESuperTypes().add(this.getXmlNamedColumn());
 		xmlAbstractColumnEClass.getESuperTypes().add(this.getXmlNamedColumn());
+		abstractXmlAbstractColumnEClass.getESuperTypes().add(this.getAbstractXmlNamedColumn());
+		abstractXmlAbstractColumnEClass.getESuperTypes().add(this.getXmlAbstractColumn());
 		xmlColumnEClass.getESuperTypes().add(this.getXmlAbstractColumn());
+		columnImplEClass.getESuperTypes().add(this.getAbstractXmlAbstractColumn());
 		columnImplEClass.getESuperTypes().add(this.getXmlColumn());
-		xmlDiscriminatorColumnEClass.getESuperTypes().add(this.getXmlNamedColumn());
+		xmlDiscriminatorColumnEClass.getESuperTypes().add(this.getAbstractXmlNamedColumn());
 		generatedValueImplEClass.getESuperTypes().add(this.getXmlGeneratedValue());
 		xmlJoinColumnEClass.getESuperTypes().add(this.getXmlAbstractColumn());
+		joinColumnImplEClass.getESuperTypes().add(this.getAbstractXmlAbstractColumn());
 		joinColumnImplEClass.getESuperTypes().add(this.getXmlJoinColumn());
 		xmlJoinTableEClass.getESuperTypes().add(this.getXmlBaseTable());
 		joinTableImplEClass.getESuperTypes().add(this.getAbstractXmlBaseTable());
@@ -10413,7 +10583,7 @@
 		prePersistEClass.getESuperTypes().add(this.getEventMethod());
 		preRemoveEClass.getESuperTypes().add(this.getEventMethod());
 		preUpdateEClass.getESuperTypes().add(this.getEventMethod());
-		xmlPrimaryKeyJoinColumnEClass.getESuperTypes().add(this.getXmlNamedColumn());
+		xmlPrimaryKeyJoinColumnEClass.getESuperTypes().add(this.getAbstractXmlNamedColumn());
 		abstractXmlBaseTableEClass.getESuperTypes().add(this.getXmlBaseTable());
 		xmlTableEClass.getESuperTypes().add(this.getAbstractXmlBaseTable());
 		xmlSecondaryTableEClass.getESuperTypes().add(this.getAbstractXmlBaseTable());
@@ -10613,6 +10783,8 @@
 		initEAttribute(getXmlNamedColumn_ColumnDefinition(), theXMLTypePackage.getString(), "columnDefinition", null, 0, 1, XmlNamedColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getXmlNamedColumn_Name(), theXMLTypePackage.getString(), "name", null, 0, 1, XmlNamedColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(abstractXmlNamedColumnEClass, AbstractXmlNamedColumn.class, "AbstractXmlNamedColumn", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(xmlAbstractColumnEClass, XmlAbstractColumn.class, "XmlAbstractColumn", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getXmlAbstractColumn_Insertable(), theXMLTypePackage.getBooleanObject(), "insertable", null, 0, 1, XmlAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getXmlAbstractColumn_Nullable(), theXMLTypePackage.getBooleanObject(), "nullable", null, 0, 1, XmlAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -10620,6 +10792,8 @@
 		initEAttribute(getXmlAbstractColumn_Unique(), theXMLTypePackage.getBooleanObject(), "unique", null, 0, 1, XmlAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getXmlAbstractColumn_Updatable(), theXMLTypePackage.getBooleanObject(), "updatable", null, 0, 1, XmlAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(abstractXmlAbstractColumnEClass, AbstractXmlAbstractColumn.class, "AbstractXmlAbstractColumn", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(xmlColumnEClass, XmlColumn.class, "XmlColumn", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getXmlColumn_Length(), theXMLTypePackage.getIntObject(), "length", null, 0, 1, XmlColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getXmlColumn_Precision(), theXMLTypePackage.getIntObject(), "precision", null, 0, 1, XmlColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -12102,6 +12276,16 @@
 		public static final EAttribute XML_NAMED_COLUMN__NAME = eINSTANCE.getXmlNamedColumn_Name();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn <em>Abstract Xml Named Column</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlNamedColumn
+		 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlNamedColumn()
+		 * @generated
+		 */
+		public static final EClass ABSTRACT_XML_NAMED_COLUMN = eINSTANCE.getAbstractXmlNamedColumn();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.jpt.core.resource.orm.XmlAbstractColumn <em>Xml Abstract Column</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -12152,6 +12336,16 @@
 		public static final EAttribute XML_ABSTRACT_COLUMN__UPDATABLE = eINSTANCE.getXmlAbstractColumn_Updatable();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn <em>Abstract Xml Abstract Column</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.resource.orm.AbstractXmlAbstractColumn
+		 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getAbstractXmlAbstractColumn()
+		 * @generated
+		 */
+		public static final EClass ABSTRACT_XML_ABSTRACT_COLUMN = eINSTANCE.getAbstractXmlAbstractColumn();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.jpt.core.resource.orm.XmlColumn <em>Xml Column</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlAbstractColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlAbstractColumn.java
index 1f02f8e..cc9b717 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlAbstractColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlAbstractColumn.java
@@ -9,6 +9,8 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.resource.orm;
 
+import org.eclipse.jpt.core.TextRange;
+
 
 /**
  * <!-- begin-user-doc -->
@@ -167,5 +169,11 @@
 	 * @generated
 	 */
 	void setUpdatable(Boolean value);
+	
+	/**
+	 * Return the {@link TextRange} for the table attibute.  If the table attibute 
+	 * does not exist return the {@link TextRange} for the *table element.
+	 */
+	TextRange tableTextRange();
 
 } // AbstractColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlDiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlDiscriminatorColumn.java
index 21ee8aa..3f4cd01 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlDiscriminatorColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlDiscriminatorColumn.java
@@ -12,7 +12,6 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
 
 /**
  * <!-- begin-user-doc -->
@@ -37,49 +36,9 @@
  * @model kind="class"
  * @generated
  */
-public class XmlDiscriminatorColumn extends AbstractJpaEObject implements XmlNamedColumn
+public class XmlDiscriminatorColumn extends AbstractXmlNamedColumn
 {
 	/**
-	 * The default value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String COLUMN_DEFINITION_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected String columnDefinition = COLUMN_DEFINITION_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
-	/**
 	 * changed this to null and removed the generated flag so emf won't generate over it
 	 * we don't want a default for enums, just null if the tag does not exist
 	 */
@@ -137,41 +96,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Column Definition</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Column Definition</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Column Definition</em>' attribute.
-	 * @see #setColumnDefinition(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_ColumnDefinition()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getColumnDefinition()
-	{
-		return columnDefinition;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.XmlDiscriminatorColumn#getColumnDefinition <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Column Definition</em>' attribute.
-	 * @see #getColumnDefinition()
-	 * @generated
-	 */
-	public void setColumnDefinition(String newColumnDefinition)
-	{
-		String oldColumnDefinition = columnDefinition;
-		columnDefinition = newColumnDefinition;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION, oldColumnDefinition, columnDefinition));
-	}
-
-	/**
 	 * Returns the value of the '<em><b>Discriminator Type</b></em>' attribute.
 	 * The default value is <code>"STRING"</code>.
 	 * The literals are from the enumeration {@link org.eclipse.jpt.core.resource.orm.DiscriminatorType}.
@@ -246,41 +170,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_Name()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getName()
-	{
-		return name;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.XmlDiscriminatorColumn#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-	public void setName(String newName)
-	{
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_DISCRIMINATOR_COLUMN__NAME, oldName, name));
-	}
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -290,10 +179,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION:
-				return getColumnDefinition();
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__NAME:
-				return getName();
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE:
 				return getDiscriminatorType();
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__LENGTH:
@@ -312,12 +197,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION:
-				setColumnDefinition((String)newValue);
-				return;
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__NAME:
-				setName((String)newValue);
-				return;
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE:
 				setDiscriminatorType((DiscriminatorType)newValue);
 				return;
@@ -338,12 +217,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION:
-				setColumnDefinition(COLUMN_DEFINITION_EDEFAULT);
-				return;
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__NAME:
-				setName(NAME_EDEFAULT);
-				return;
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE:
 				setDiscriminatorType(DISCRIMINATOR_TYPE_EDEFAULT);
 				return;
@@ -364,10 +237,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__COLUMN_DEFINITION:
-				return COLUMN_DEFINITION_EDEFAULT == null ? columnDefinition != null : !COLUMN_DEFINITION_EDEFAULT.equals(columnDefinition);
-			case OrmPackage.XML_DISCRIMINATOR_COLUMN__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE:
 				return discriminatorType != DISCRIMINATOR_TYPE_EDEFAULT;
 			case OrmPackage.XML_DISCRIMINATOR_COLUMN__LENGTH:
@@ -387,11 +256,7 @@
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (columnDefinition: ");
-		result.append(columnDefinition);
-		result.append(", name: ");
-		result.append(name);
-		result.append(", discriminatorType: ");
+		result.append(" (discriminatorType: ");
 		result.append(discriminatorType);
 		result.append(", length: ");
 		result.append(length);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlJoinColumn.java
index c76e6dc..e01285c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlJoinColumn.java
@@ -9,6 +9,8 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.resource.orm;
 
+import org.eclipse.jpt.core.TextRange;
+
 
 /**
  * <!-- begin-user-doc -->
@@ -59,5 +61,7 @@
 	 * @generated
 	 */
 	void setReferencedColumnName(String value);
+	
+	TextRange referencedColumnNameTextRange();
 
 } // JoinColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlNamedColumn.java
index 243cbc1..0f9c44a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlNamedColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlNamedColumn.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.resource.orm;
 
+import org.eclipse.jpt.core.TextRange;
 import org.eclipse.jpt.core.resource.common.JpaEObject;
 
 /**
@@ -89,4 +90,10 @@
 	 */
 	void setName(String value);
 
+	/**
+	 * Return the {@link TextRange} for the name attibute.  If the name attibute 
+	 * does not exist return the {@link TextRange} for the *table element.
+	 */
+	TextRange nameTextRange();
+
 } // NamedColumn
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlPrimaryKeyJoinColumn.java
index 80b0a07..440d4d1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlPrimaryKeyJoinColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/orm/XmlPrimaryKeyJoinColumn.java
@@ -12,7 +12,10 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
+import org.eclipse.jpt.core.TextRange;
+import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
+import org.eclipse.jpt.core.internal.resource.orm.translators.OrmXmlMapper;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 
 /**
  * <!-- begin-user-doc -->
@@ -36,49 +39,9 @@
  * @model kind="class"
  * @generated
  */
-public class XmlPrimaryKeyJoinColumn extends AbstractJpaEObject implements XmlNamedColumn
+public class XmlPrimaryKeyJoinColumn extends AbstractXmlNamedColumn
 {
 	/**
-	 * The default value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String COLUMN_DEFINITION_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getColumnDefinition() <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getColumnDefinition()
-	 * @generated
-	 * @ordered
-	 */
-	protected String columnDefinition = COLUMN_DEFINITION_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
-	/**
 	 * The default value of the '{@link #getReferencedColumnName() <em>Referenced Column Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -120,41 +83,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_Name()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getName()
-	{
-		return name;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.XmlPrimaryKeyJoinColumn#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-	public void setName(String newName)
-	{
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__NAME, oldName, name));
-	}
-
-	/**
 	 * Returns the value of the '<em><b>Referenced Column Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
@@ -190,41 +118,6 @@
 	}
 
 	/**
-	 * Returns the value of the '<em><b>Column Definition</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Column Definition</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Column Definition</em>' attribute.
-	 * @see #setColumnDefinition(String)
-	 * @see org.eclipse.jpt.core.resource.orm.OrmPackage#getXmlNamedColumn_ColumnDefinition()
-	 * @model dataType="org.eclipse.emf.ecore.xml.type.String"
-	 * @generated
-	 */
-	public String getColumnDefinition()
-	{
-		return columnDefinition;
-	}
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.resource.orm.XmlPrimaryKeyJoinColumn#getColumnDefinition <em>Column Definition</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Column Definition</em>' attribute.
-	 * @see #getColumnDefinition()
-	 * @generated
-	 */
-	public void setColumnDefinition(String newColumnDefinition)
-	{
-		String oldColumnDefinition = columnDefinition;
-		columnDefinition = newColumnDefinition;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION, oldColumnDefinition, columnDefinition));
-	}
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -234,10 +127,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION:
-				return getColumnDefinition();
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__NAME:
-				return getName();
 			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME:
 				return getReferencedColumnName();
 		}
@@ -254,12 +143,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION:
-				setColumnDefinition((String)newValue);
-				return;
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__NAME:
-				setName((String)newValue);
-				return;
 			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME:
 				setReferencedColumnName((String)newValue);
 				return;
@@ -277,12 +160,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION:
-				setColumnDefinition(COLUMN_DEFINITION_EDEFAULT);
-				return;
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__NAME:
-				setName(NAME_EDEFAULT);
-				return;
 			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME:
 				setReferencedColumnName(REFERENCED_COLUMN_NAME_EDEFAULT);
 				return;
@@ -300,10 +177,6 @@
 	{
 		switch (featureID)
 		{
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION:
-				return COLUMN_DEFINITION_EDEFAULT == null ? columnDefinition != null : !COLUMN_DEFINITION_EDEFAULT.equals(columnDefinition);
-			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case OrmPackage.XML_PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME:
 				return REFERENCED_COLUMN_NAME_EDEFAULT == null ? referencedColumnName != null : !REFERENCED_COLUMN_NAME_EDEFAULT.equals(referencedColumnName);
 		}
@@ -321,14 +194,16 @@
 		if (eIsProxy()) return super.toString();
 
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (columnDefinition: ");
-		result.append(columnDefinition);
-		result.append(", name: ");
-		result.append(name);
-		result.append(", referencedColumnName: ");
+		result.append(" (referencedColumnName: ");
 		result.append(referencedColumnName);
 		result.append(')');
 		return result.toString();
 	}
+	
+	public TextRange referencedColumnNameTextRange() {
+		IDOMNode referencedColumnNameNode = (IDOMNode) DOMUtilities.getChildAttributeNode(this.node, OrmXmlMapper.REFERENCED_COLUMN_NAME);
+		return (referencedColumnNameNode == null) ? validationTextRange() : buildTextRange(referencedColumnNameNode);
+	}
+
 
 } // PrimaryKeyJoinColumn