Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 331480 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java (+50 lines)
Lines 19-30 Link Here
19
import org.eclipse.jdt.core.IParent;
19
import org.eclipse.jdt.core.IParent;
20
import org.eclipse.jdt.core.IType;
20
import org.eclipse.jdt.core.IType;
21
import org.eclipse.jdt.core.JavaModelException;
21
import org.eclipse.jdt.core.JavaModelException;
22
import org.eclipse.jdt.core.Signature;
22
import org.eclipse.jpt.common.core.JptCommonCorePlugin;
23
import org.eclipse.jpt.common.core.JptCommonCorePlugin;
23
import org.eclipse.jpt.common.utility.Filter;
24
import org.eclipse.jpt.common.utility.Filter;
24
import org.eclipse.jpt.common.utility.internal.ArrayTools;
25
import org.eclipse.jpt.common.utility.internal.ArrayTools;
25
import org.eclipse.jpt.common.utility.internal.ClassName;
26
import org.eclipse.jpt.common.utility.internal.ClassName;
26
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
27
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
27
import org.eclipse.jpt.common.utility.internal.ReflectionTools;
28
import org.eclipse.jpt.common.utility.internal.ReflectionTools;
29
import org.eclipse.jpt.common.utility.internal.StringTools;
28
import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable;
30
import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable;
29
import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
31
import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
30
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
32
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
Lines 117-122 Link Here
117
		return false;
119
		return false;
118
	}
120
	}
119
121
122
	
123
	/**
124
	 * Return true if the given type named contains a method name as given with the given parameter types
125
	 */
126
	public static boolean typeNamedImplementsMethod(IJavaProject javaProject, String typeName, String methodName, String[] parameterTypeNames) {
127
		try {
128
			return typeImplementsMethod(javaProject.findType(typeName), methodName, parameterTypeNames);
129
		} catch (JavaModelException ex) {
130
			JptCommonCorePlugin.log(ex);
131
			return false;
132
		}
133
	}
134
135
	private static boolean typeImplementsMethod(IType type, String methodName, String[] parameterTypeNames) {
136
		if ((type == null) || methodName == null) {
137
			return false;
138
		}
139
140
		try {
141
			IMethod[] methods = type.getMethods();
142
			for (IMethod method : methods) {
143
				if (StringTools.stringsAreEqual(method.getElementName(), methodName)) {
144
					if (parameterTypeNames.length == 0 && method.getNumberOfParameters() == 0) {
145
						return true;
146
					} else if (parameterTypeNames.length == method.getNumberOfParameters()) {
147
						int index = 0;
148
						String[] parameters = method.getParameterTypes();
149
						String resolvedParameterTypeName = parameters[0];
150
						if (!type.isResolved()) {
151
							resolvedParameterTypeName = resolveType(type, Signature.getSignatureSimpleName(parameters[index]));
152
						}
153
						for (String parameterTypeName : parameterTypeNames) {
154
							if (!StringTools.stringsAreEqual(resolvedParameterTypeName, parameterTypeName)) {
155
								return false;
156
							}
157
							index++;
158
						}
159
						return true;
160
					}
161
				}
162
			}
163
		} catch (JavaModelException ex) {
164
			JptCommonCorePlugin.log(ex);
165
			return false;			
166
		}
167
		return false;
168
	}
169
	
120
	/**
170
	/**
121
	 * Return the names of the specified type's supertypes (class and interfaces).
171
	 * Return the names of the specified type's supertypes (class and interfaces).
122
	 * This is necessary because, for whatever reason, { @link IType#getSuperInterfaceNames()}
172
	 * This is necessary because, for whatever reason, { @link IType#getSuperInterfaceNames()}
(-)property_files/jpa_validation.properties (+5 lines)
Lines 60-65 Link Here
60
TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has no no-arg constructor defined
60
TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has no no-arg constructor defined
61
TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has a private no-arg constructor; it must be public or protected.
61
TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has a private no-arg constructor; it must be public or protected.
62
TYPE_MAPPING_FINAL_CLASS=The java class for mapped type \"{0}\" is final
62
TYPE_MAPPING_FINAL_CLASS=The java class for mapped type \"{0}\" is final
63
TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED=This class must use either an ID or and embedded ID to specify its primary key, not both.
63
TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=This class must use either an ID class or an embedded ID to specify its composite primary key, not both.
64
TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=This class must use either an ID class or an embedded ID to specify its composite primary key, not both.
64
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute {0} is a duplicate match for ID class
65
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute {0} is a duplicate match for ID class
65
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=There is no ID class attribute to match the primary key attribute {0}
66
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=There is no ID class attribute to match the primary key attribute {0}
Lines 84-89 Link Here
84
ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Target class does not exist on the project classpath
85
ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Target class does not exist on the project classpath
85
ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Target class \"{0}\" is not an embeddable or basic type
86
ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Target class \"{0}\" is not an embeddable or basic type
86
ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Target class is not defined
87
ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Target class is not defined
88
EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC=Embedded id class should be public.
89
EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE=Embedded id class should include method definitions for equals() and hashcode().
90
EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE=Embedded id class should implement Serializable.
91
EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS=Embedded id class should not contain relationship mappings.
87
EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides.
92
EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides.
88
ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=In {0}, a column is specified, but it is mapped by a relationship. IDs that are mapped by a relationship should not specify a column.
93
ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=In {0}, a column is specified, but it is mapped by a relationship. IDs that are mapped by a relationship should not specify a column.
89
MAPS_ID_VALUE_INVALID=In {0}, the "maps ID" value ''{1}'' does not refer to an attribute that is used as an ID for this entity
94
MAPS_ID_VALUE_INVALID=In {0}, the "maps ID" value ''{1}'' does not refer to an attribute that is used as an ID for this entity
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java (+2 lines)
Lines 72-77 Link Here
72
		validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter);
72
		validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter);
73
		// ... and only one embedded id
73
		// ... and only one embedded id
74
		validateOneEmbeddedId(messages, reporter);
74
		validateOneEmbeddedId(messages, reporter);
75
		// ... and not both id and embedded id
76
		validateOneOfEmbeddedOrIdIsUsed(messages, reporter);
75
		
77
		
76
		validateMapsIdMappings(messages, reporter);
78
		validateMapsIdMappings(messages, reporter);
77
		
79
		
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java (+2 lines)
Lines 43-48 Link Here
43
		validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter);
43
		validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter);
44
		// ... and only one embedded id
44
		// ... and only one embedded id
45
		validateOneEmbeddedId(messages, reporter);
45
		validateOneEmbeddedId(messages, reporter);
46
		// ... and not both id and embedded id
47
		validateOneOfEmbeddedOrIdIsUsed(messages, reporter);
46
		
48
		
47
		if (specifiesIdClass()) {
49
		if (specifiesIdClass()) {
48
			validateIdClass(idClassReference().getIdClass(), messages, reporter);
50
			validateIdClass(idClassReference().getIdClass(), messages, reporter);
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java (+21 lines)
Lines 117-122 Link Here
117
		}
117
		}
118
	}
118
	}
119
	
119
	
120
	//only embedded or id, both may not be used
121
	protected void validateOneOfEmbeddedOrIdIsUsed(List<IMessage> messages, IReporter reporter) {
122
		if (definesEmbeddedIdMapping(typeMapping) && definesIdMapping(typeMapping)) {
123
			messages.add(
124
					DefaultJpaValidationMessages.buildMessage(
125
						IMessage.HIGH_SEVERITY,
126
						JpaValidationMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED,
127
						EMPTY_STRING_ARRAY,
128
						typeMapping(),
129
						textRangeResolver().getTypeMappingTextRange()));
130
		}
131
	}
132
	
120
	// only one embedded id may be used
133
	// only one embedded id may be used
121
	protected void validateOneEmbeddedId(List<IMessage> messages, IReporter reporter) {
134
	protected void validateOneEmbeddedId(List<IMessage> messages, IReporter reporter) {
122
		if (CollectionTools.size(getEmbeddedIdMappings(typeMapping())) > 1) {
135
		if (CollectionTools.size(getEmbeddedIdMappings(typeMapping())) > 1) {
Lines 459-464 Link Here
459
		return ! CollectionTools.isEmpty(getEmbeddedIdMappings(typeMapping));
472
		return ! CollectionTools.isEmpty(getEmbeddedIdMappings(typeMapping));
460
	}
473
	}
461
	
474
	
475
	/**
476
	 * Return whether an id is defined for this class, whether that be locally
477
	 * or on an ancestor
478
	 */
479
	protected boolean definesIdMapping(TypeMapping typeMapping) {
480
		return ! CollectionTools.isEmpty(getIdMappings(typeMapping));
481
	}
482
	
462
	protected EmbeddedIdMapping getEmbeddedIdMapping(TypeMapping typeMapping) {
483
	protected EmbeddedIdMapping getEmbeddedIdMapping(TypeMapping typeMapping) {
463
		Iterable<EmbeddedIdMapping> embeddedIdMappings = getEmbeddedIdMappings(typeMapping);
484
		Iterable<EmbeddedIdMapping> embeddedIdMappings = getEmbeddedIdMappings(typeMapping);
464
		if (CollectionTools.size(embeddedIdMappings) == 1) {
485
		if (CollectionTools.size(embeddedIdMappings) == 1) {
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java (-1 / +85 lines)
Lines 9-16 Link Here
9
 ******************************************************************************/
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa1.context.java;
10
package org.eclipse.jpt.jpa.core.internal.jpa1.context.java;
11
11
12
import java.io.Serializable;
12
import java.util.List;
13
import java.util.List;
14
15
import org.eclipse.jdt.core.IJavaProject;
13
import org.eclipse.jdt.core.dom.CompilationUnit;
16
import org.eclipse.jdt.core.dom.CompilationUnit;
17
import org.eclipse.jpt.common.core.internal.utility.JDTTools;
14
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
18
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
15
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
19
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
16
import org.eclipse.jpt.jpa.core.MappingKeys;
20
import org.eclipse.jpt.jpa.core.MappingKeys;
Lines 101-107 Link Here
101
	@Override
105
	@Override
102
	public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
106
	public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
103
		super.validate(messages, reporter, astRoot);
107
		super.validate(messages, reporter, astRoot);
104
108
		validateMappedByRelationshipAndAttributeOverridesSpecified(messages, reporter, astRoot);
109
		validateTargetEmbeddableImplementsEqualsAndHashcode(messages, reporter, astRoot);
110
		validateTargetEmbeddableIsPublic(messages, reporter, astRoot);
111
		validateTargetEmbeddableImplementsSerializable(messages, reporter, astRoot);
112
		validateNoRelationshipMappingsOnTargetEmbeddable(messages, reporter, astRoot);
113
	}
114
	
115
	protected void validateNoRelationshipMappingsOnTargetEmbeddable(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
116
		if (this.getTargetEmbeddable() != null) {
117
			TypeMapping targetEmbeddableTypeMapping = this.getTargetEmbeddable().getPersistentType().getMapping();
118
			if (targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
119
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
120
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
121
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()) {
122
				messages.add(
123
					DefaultJpaValidationMessages.buildMessage(
124
						IMessage.HIGH_SEVERITY,
125
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS,
126
						EMPTY_STRING_ARRAY,
127
						this,
128
						this.getValidationTextRange(astRoot)
129
					)
130
				);				
131
			}
132
		}
133
	}
134
	
135
	protected void validateTargetEmbeddableImplementsSerializable(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
136
		if (this.getTargetEmbeddable() != null) {
137
			String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName();
138
			IJavaProject javaProject = getJpaProject().getJavaProject();
139
			if (!JDTTools.typeIsSubType(javaProject, targetEmbeddableClassName, Serializable.class.getName())) {
140
				messages.add(
141
					DefaultJpaValidationMessages.buildMessage(
142
						IMessage.HIGH_SEVERITY,
143
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE,
144
						EMPTY_STRING_ARRAY,
145
						this,
146
						this.getValidationTextRange(astRoot)
147
					)
148
				);
149
			}
150
		}
151
	}
152
	
153
	protected void validateTargetEmbeddableIsPublic(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
154
		if (this.getTargetEmbeddable() != null) {
155
			if (!getTargetEmbeddable().getJavaResourceType().isPublic()) {
156
				messages.add(
157
					DefaultJpaValidationMessages.buildMessage(
158
						IMessage.HIGH_SEVERITY,
159
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC,
160
						EMPTY_STRING_ARRAY,
161
						this,
162
						this.getValidationTextRange(astRoot)
163
					)
164
				);
165
			}
166
		}
167
	}
168
	
169
	protected void validateTargetEmbeddableImplementsEqualsAndHashcode(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
170
		if (this.getTargetEmbeddable() != null) {
171
			String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName();
172
			IJavaProject javaProject = getJpaProject().getJavaProject();
173
			if (!JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "equals", new String[] {Object.class.getName()})
174
					|| !JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "hashCode", EMPTY_STRING_ARRAY)) {
175
				messages.add(
176
					DefaultJpaValidationMessages.buildMessage(
177
						IMessage.HIGH_SEVERITY,
178
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE,
179
						EMPTY_STRING_ARRAY,
180
						this,
181
						this.getValidationTextRange(astRoot)
182
					)
183
				);
184
			}
185
		}
186
	}
187
	
188
	protected void validateMappedByRelationshipAndAttributeOverridesSpecified(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) {
105
		// [JPA 2.0] if the embedded id is mapped by a relationship, then any specified
189
		// [JPA 2.0] if the embedded id is mapped by a relationship, then any specified
106
		// attribute overrides are in error
190
		// attribute overrides are in error
107
		// (in JPA 1.0, this will obviously never be reached)
191
		// (in JPA 1.0, this will obviously never be reached)
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java (-2 / +87 lines)
Lines 9-15 Link Here
9
 ******************************************************************************/
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm;
10
package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm;
11
11
12
import java.io.Serializable;
12
import java.util.List;
13
import java.util.List;
14
15
import org.eclipse.jdt.core.IJavaProject;
16
import org.eclipse.jpt.common.core.internal.utility.JDTTools;
13
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
17
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
14
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
18
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
15
import org.eclipse.jpt.jpa.core.MappingKeys;
19
import org.eclipse.jpt.jpa.core.MappingKeys;
Lines 113-119 Link Here
113
	@Override
117
	@Override
114
	public void validate(List<IMessage> messages, IReporter reporter) {
118
	public void validate(List<IMessage> messages, IReporter reporter) {
115
		super.validate(messages, reporter);
119
		super.validate(messages, reporter);
120
		validateMappedByRelationshipAndAttributeOverridesSpecified(messages, reporter);
121
		validateTargetEmbeddableImplementsEqualsAndHashcode(messages, reporter);
122
		validateTargetEmbeddableIsPublic(messages, reporter);
123
		validateTargetEmbeddableImplementsSerializable(messages, reporter);
124
		validateNoRelationshipMappingsOnTargetEmbeddable(messages, reporter);
125
	}
126
	
127
	protected void validateNoRelationshipMappingsOnTargetEmbeddable(List<IMessage> messages, IReporter reporter) {
128
		if (this.getTargetEmbeddable() != null) {
129
			TypeMapping targetEmbeddableTypeMapping = this.getTargetEmbeddable().getPersistentType().getMapping();
130
			if (targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
131
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
132
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()
133
					|| targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()) {
134
				messages.add(
135
					DefaultJpaValidationMessages.buildMessage(
136
						IMessage.HIGH_SEVERITY,
137
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS,
138
						EMPTY_STRING_ARRAY,
139
						this,
140
						this.getValidationTextRange()
141
					)
142
				);				
143
			}
144
		}
145
	}
146
	
147
	protected void validateTargetEmbeddableImplementsSerializable(List<IMessage> messages, IReporter reporter) {
148
		if (this.getTargetEmbeddable() != null) {
149
			String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName();
150
			IJavaProject javaProject = getJpaProject().getJavaProject();
151
			if (!JDTTools.typeIsSubType(javaProject, targetEmbeddableClassName, Serializable.class.getName())) {
152
				messages.add(
153
					DefaultJpaValidationMessages.buildMessage(
154
						IMessage.HIGH_SEVERITY,
155
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE,
156
						EMPTY_STRING_ARRAY,
157
						this,
158
						this.getValidationTextRange()
159
					)
160
				);
161
			}
162
		}
163
	}
164
	
165
	protected void validateTargetEmbeddableIsPublic(List<IMessage> messages, IReporter reporter) {
166
		if (this.getTargetEmbeddable() != null) {
167
//			String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName();
168
//			IJavaProject javaProject = getJpaProject().getJavaProject();
169
//			if (!JDTTools.classIsPublic(javaProject, targetEmbeddableClassName)) {
170
			if (!getTargetEmbeddable().getJavaResourceType().isPublic()) {
171
				messages.add(
172
					DefaultJpaValidationMessages.buildMessage(
173
						IMessage.HIGH_SEVERITY,
174
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC,
175
						EMPTY_STRING_ARRAY,
176
						this,
177
						this.getValidationTextRange()
178
					)
179
				);
180
			}
181
		}
182
	}
116
183
184
	protected void validateTargetEmbeddableImplementsEqualsAndHashcode(List<IMessage> messages, IReporter reporter) {
185
		if (this.getTargetEmbeddable() != null) {
186
			String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName();
187
			IJavaProject javaProject = getJpaProject().getJavaProject();
188
			if (!JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "equals", new String[] {Object.class.getName()})
189
					|| !JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "hashCode", EMPTY_STRING_ARRAY)) {
190
				messages.add(
191
					DefaultJpaValidationMessages.buildMessage(
192
						IMessage.HIGH_SEVERITY,
193
						JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE,
194
						EMPTY_STRING_ARRAY,
195
						this,
196
						this.getValidationTextRange()
197
					)
198
				);
199
			}
200
		}
201
	}
202
	
203
	protected void validateMappedByRelationshipAndAttributeOverridesSpecified(List<IMessage> messages, IReporter reporter) {
117
		// [JPA 2.0] if the embedded id is mapped by a relationship, then any specified
204
		// [JPA 2.0] if the embedded id is mapped by a relationship, then any specified
118
		// attribute overrides are in error
205
		// attribute overrides are in error
119
		// (in JPA 1.0, this will obviously never be reached)
206
		// (in JPA 1.0, this will obviously never be reached)
Lines 130-137 Link Here
130
			);
217
			);
131
		}
218
		}
132
	}
219
	}
133
134
135
	// ********** attribute override container owner *********
220
	// ********** attribute override container owner *********
136
221
137
	protected class AttributeOverrideContainerOwner
222
	protected class AttributeOverrideContainerOwner
(-)src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java (+5 lines)
Lines 64-69 Link Here
64
	public static final String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR";
64
	public static final String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR";
65
	public static final String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR";
65
	public static final String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR";
66
	public static final String TYPE_MAPPING_FINAL_CLASS = "TYPE_MAPPING_FINAL_CLASS";
66
	public static final String TYPE_MAPPING_FINAL_CLASS = "TYPE_MAPPING_FINAL_CLASS";
67
	public static final String TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED = "TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED";
67
	public static final String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED = "TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED";
68
	public static final String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED = "TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED";
68
	public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH";
69
	public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH";
69
	public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH";
70
	public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH";
Lines 88-93 Link Here
88
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST = "ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST";
89
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST = "ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST";
89
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE = "ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE";
90
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE = "ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE";
90
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED = "ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED";
91
	public static final String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED = "ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED";
92
	public static final String EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC="EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC";
93
	public static final String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE = "EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE";
94
	public static final String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE="EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE";
95
	public static final String EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS="EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS";
91
	public static final String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED = "EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED";
96
	public static final String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED = "EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED";
92
	public static final String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED = "ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED";
97
	public static final String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED = "ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED";
93
	public static final String MAPS_ID_VALUE_INVALID = "MAPS_ID_VALUE_INVALID";
98
	public static final String MAPS_ID_VALUE_INVALID = "MAPS_ID_VALUE_INVALID";
(-)property_files/jpt_ui_validation_preferences.properties (+5 lines)
Lines 60-65 Link Here
60
TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=Mapped Java class has no no-arg constructor:
60
TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=Mapped Java class has no no-arg constructor:
61
TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=Mapped Java class has a private no-arg constructor:
61
TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=Mapped Java class has a private no-arg constructor:
62
TYPE_MAPPING_FINAL_CLASS=Mapped Java class is final:
62
TYPE_MAPPING_FINAL_CLASS=Mapped Java class is final:
63
TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED=ID and embedded ID are not allowed to use together:
63
TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=ID class and embedded ID mapping are not allowed to use together:
64
TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=ID class and embedded ID mapping are not allowed to use together:
64
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute is a duplicate match for ID class:
65
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute is a duplicate match for ID class:
65
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=No ID class attribute matches primary key attribute:
66
TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=No ID class attribute matches primary key attribute:
Lines 83-88 Link Here
83
ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Element collection target class does not exist on the project classpath:
84
ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Element collection target class does not exist on the project classpath:
84
ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Element collection target class is not embeddable or basic type:
85
ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Element collection target class is not embeddable or basic type:
85
ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Element collection target class is not specified:
86
ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Element collection target class is not specified:
87
EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC=Embedded ID classes should be public:
88
EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE=Embedded ID classes should implement equals() and hashcode():
89
EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE=Embedded ID classes should implement Serializable:
90
EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS=Embedded ID classes should not contain relationship mappings:
86
EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides:
91
EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides:
87
ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=IDs that are mapped by a relationship should not specify a column:
92
ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=IDs that are mapped by a relationship should not specify a column:
88
MAPS_ID_VALUE_INVALID="Maps ID" attribute value invalid:
93
MAPS_ID_VALUE_INVALID="Maps ID" attribute value invalid:
(-)src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java (+5 lines)
Lines 68-73 Link Here
68
	public static String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR;
68
	public static String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR;
69
	public static String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR;
69
	public static String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR;
70
	public static String TYPE_MAPPING_FINAL_CLASS;
70
	public static String TYPE_MAPPING_FINAL_CLASS;
71
	public static String TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED;
71
	public static String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED; 	//3.0 M7
72
	public static String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED; 	//3.0 M7
72
	public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH;	//3.0 M7
73
	public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH;	//3.0 M7
73
	public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH;	//3.0 M7
74
	public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH;	//3.0 M7
Lines 92-97 Link Here
92
	public static String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST;// 3.0 M7
93
	public static String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST;// 3.0 M7
93
	public static String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE;
94
	public static String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE;
94
	public static String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED;
95
	public static String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED;
96
	public static String EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC;
97
	public static String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE;
98
	public static String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE;
99
	public static String EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS;
95
	public static String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED; //3.0 M7
100
	public static String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED; //3.0 M7
96
	public static String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED; //3.0 M7
101
	public static String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED; //3.0 M7
97
	public static String MAPS_ID_VALUE_INVALID;
102
	public static String MAPS_ID_VALUE_INVALID;
(-)src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java (+5 lines)
Lines 323-328 Link Here
323
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR,								JpaValidationMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR);
323
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR,								JpaValidationMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR);
324
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR,								JpaValidationMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR);		
324
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR,								JpaValidationMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR);		
325
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_FINAL_CLASS,																		JpaValidationMessages.TYPE_MAPPING_FINAL_CLASS);
325
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_FINAL_CLASS,																		JpaValidationMessages.TYPE_MAPPING_FINAL_CLASS);
326
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED,												JpaValidationMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED);	
326
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED,							JpaValidationMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED);	//3.0 M7
327
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED,							JpaValidationMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED);	//3.0 M7
327
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH,				JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH);	//3.0 M7
328
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH,				JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH);	//3.0 M7
328
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH,							JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH);	//3.0 M7
329
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH,							JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH);	//3.0 M7
Lines 349-354 Link Here
349
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE, 					JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE);
350
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE, 					JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE);
350
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST,													JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST); //3.0 M7
351
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST,													JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST); //3.0 M7
351
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED,															JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED);
352
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED,															JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED);
353
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC,																JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC);	
354
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE,																JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE);	
355
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE,																JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE);	
356
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS,																JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS);	
352
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED,	JpaValidationMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED); //3.0 M7
357
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED,	JpaValidationMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED); //3.0 M7
353
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED,										JpaValidationMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED); 	//3.0 M7
358
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED,										JpaValidationMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED); 	//3.0 M7
354
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.MAPS_ID_VALUE_INVALID,																										JpaValidationMessages.MAPS_ID_VALUE_INVALID);
359
		addLabeledCombo(parent, JptUiValidationPreferenceMessages.MAPS_ID_VALUE_INVALID,																										JpaValidationMessages.MAPS_ID_VALUE_INVALID);

Return to bug 331480