diff options
9 files changed, 145 insertions, 106 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation.properties b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation.properties index 13f8f623ae..eda9209d10 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation.properties +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation.properties @@ -58,12 +58,13 @@ ENTITY_NAME_MISSING=The given name of the entity \"{0}\" is empty ENTITY_NO_PK=The entity has no primary key attribute defined ENTITY_NON_ROOT_ID_ATTRIBUTE_SPECIFIED=A primary key attribute should only be defined on the root entity or a mapped superclass ENTITY_NON_ROOT_ID_CLASS_SPECIFIED=An ID class should only be defined on the root entity or a mapped superclass -TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class \"{0}\" is annotated, but not listed in the persistence.xml file -TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class \"{0}\" is managed, but is not listed in the persistence.xml file -PERSISTENT_TYPE_DUPLICATE_CLASS=Duplicate class \"{0}\" found in mapping files. This configuration is not supported by the tooling and may result in invalid error messages. MANAGED_TYPE_UNRESOLVED_CLASS=Class \"{0}\" cannot be resolved MANAGED_TYPE_UNSPECIFIED_CLASS=Unspecified class +ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED=Root entity should not have primary key join column defined +PERSISTENT_TYPE_DUPLICATE_CLASS=Duplicate class \"{0}\" found in mapping files. This configuration is not supported by the tooling and may result in invalid error messages. TARGET_NOT_AN_EMBEDDABLE={0} is not mapped as an embeddable +TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class \"{0}\" is annotated, but not listed in the persistence.xml file +TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class \"{0}\" is managed, but is not listed in the persistence.xml file TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=The Java class for mapped type \"{0}\" must define a non-private zero-argument constructor TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=The Java class for mapped type \"{0}\" has a private zero-argument constructor; it must be public or protected TYPE_MAPPING_FINAL_CLASS=The Java class for mapped type \"{0}\" is final diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation_description.properties b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation_description.properties index 57d8fb42d6..b7c0b5fdf3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation_description.properties +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpt_jpa_core_validation_description.properties @@ -53,12 +53,13 @@ ENTITY_NAME_MISSING=Entity name is empty ENTITY_NO_PK=Entity has no primary key ENTITY_NON_ROOT_ID_ATTRIBUTE_SPECIFIED=Primary key attribute should only be defined on the root entity or a mapped superclass ENTITY_NON_ROOT_ID_CLASS_SPECIFIED=ID class should only be defined on the root entity or a mapped superclass -TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class is annotated, but is not listed in the persistence.xml file -TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class is managed, but is not listed in the persistence.xml file -PERSISTENT_TYPE_DUPLICATE_CLASS=Duplicate ORM class MANAGED_TYPE_UNRESOLVED_CLASS=Class in orm.xml cannot be resolved to a java class MANAGED_TYPE_UNSPECIFIED_CLASS=Class is unspecified in orm.xml +PERSISTENT_TYPE_DUPLICATE_CLASS=Duplicate ORM class +ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED=Root entity should not have primary key join column defined TARGET_NOT_AN_EMBEDDABLE=Target type of an embedded mapping is not an embeddable +TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class is annotated, but is not listed in the persistence.xml file +TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML=Class is managed, but is not listed in the persistence.xml file TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=Mapped Java class has no no-arg constructor TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=Mapped Java class has a private no-arg constructor TYPE_MAPPING_FINAL_CLASS=Mapped Java class is final diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java index b6850e27b8..1a1a1bac03 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java @@ -80,13 +80,13 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideValidat import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.DiscriminatorColumnValidator; +import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityPrimaryKeyJoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.GenericEntityPrimaryKeyValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.MappedSuperclassOverrideDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.SecondaryTableValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.TableValidator; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.JavaEntityPrimaryKeyJoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.resource.java.NullPrimaryKeyJoinColumnAnnotation; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; @@ -517,16 +517,15 @@ public abstract class AbstractJavaEntity } public void convertDefaultPrimaryKeyJoinColumnsToSpecified() { - if (this.defaultPrimaryKeyJoinColumn == null) { - throw new IllegalStateException("default PK join column is null"); //$NON-NLS-1$ - } - // Add a PK join column by creating a specified one using the default one - String columnName = this.defaultPrimaryKeyJoinColumn.getDefaultName(); - String referencedColumnName = this.defaultPrimaryKeyJoinColumn.getDefaultReferencedColumnName(); - - SpecifiedPrimaryKeyJoinColumn pkJoinColumn = this.addSpecifiedPrimaryKeyJoinColumn(0); - pkJoinColumn.setSpecifiedName(columnName); - pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName); + // This is for root entities which have no default PK join column + SpecifiedPrimaryKeyJoinColumn pkJoinColumn = this.addSpecifiedPrimaryKeyJoinColumn(0); + // Add a PK join column by creating a specified one using the default one + if (this.defaultPrimaryKeyJoinColumn != null) { + String columnName = this.defaultPrimaryKeyJoinColumn.getDefaultName(); + String referencedColumnName = this.defaultPrimaryKeyJoinColumn.getDefaultReferencedColumnName(); + pkJoinColumn.setSpecifiedName(columnName); + pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName); + } } public void clearSpecifiedPrimaryKeyJoinColumns() { @@ -626,7 +625,7 @@ public abstract class AbstractJavaEntity } protected boolean buildsDefaultPrimaryKeyJoinColumn() { - return ! this.hasSpecifiedPrimaryKeyJoinColumns(); + return ! this.isRootEntity() && ! this.hasSpecifiedPrimaryKeyJoinColumns(); } protected JavaSpecifiedPrimaryKeyJoinColumn buildDefaultPrimaryKeyJoinColumn() { @@ -1222,9 +1221,7 @@ public abstract class AbstractJavaEntity secondaryTable.validate(messages, reporter); } this.validateInheritance(messages, reporter); - for (JavaSpecifiedPrimaryKeyJoinColumn pkJoinColumn : this.getPrimaryKeyJoinColumns()) { - pkJoinColumn.validate(messages, reporter); - } + this.validatePrimaryKeyJoinColumns(messages, reporter); this.generatorContainer.validate(messages, reporter); this.queryContainer.validate(messages, reporter); this.attributeOverrideContainer.validate(messages, reporter); @@ -1232,6 +1229,24 @@ public abstract class AbstractJavaEntity this.validateEntityName(messages); } + protected void validatePrimaryKeyJoinColumns(List<IMessage> messages, IReporter reporter) { + if (this.getPrimaryKeyJoinColumnsSize() > 0) { + if (this.getParentEntity() == null) { + messages.add( + this.buildValidationMessage( + this.getMappingAnnotation().getNameTextRange(), + JptJpaCoreValidationMessages.ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED, + this.getPersistentType().getName() + ) + ); + } else { + for (JavaSpecifiedPrimaryKeyJoinColumn pkJoinColumn : this.getPrimaryKeyJoinColumns()) { + pkJoinColumn.validate(messages, reporter); + } + } + } + } + @Override public boolean validatesAgainstDatabase() { return super.validatesAgainstDatabase() && ! this.isAbstractTablePerClass(); @@ -1585,7 +1600,7 @@ public abstract class AbstractJavaEntity } public JpaValidator buildColumnValidator(NamedColumn column) { - return new JavaEntityPrimaryKeyJoinColumnValidator((BaseJoinColumn) column, this, AbstractJavaEntity.this); + return new EntityPrimaryKeyJoinColumnValidator((BaseJoinColumn) column, this); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java index 79c68fec83..b2e6e8401a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java @@ -764,6 +764,11 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } public void convertDefaultPrimaryKeyJoinColumnsToSpecified() { + // This is necessary for root entities which have no default PK join column + if (this.getPrimaryKeyJoinColumnsSize() == 0) { + this.addSpecifiedPrimaryKeyJoinColumn(); + } + for (PrimaryKeyJoinColumn defaultJoinColumn : this.getDefaultPrimaryKeyJoinColumns()) { String columnName = defaultJoinColumn.getName(); String referencedColumnName = defaultJoinColumn.getReferencedColumnName(); @@ -868,7 +873,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> if (this.javaPrimaryKeyJoinColumnsWillBeDefaults()) { // specified => java this.initializeVirtualPrimaryKeyJoinColumns(); - } else { + } else if (this.getParentEntity() != null) { // specified => default this.addDefaultPrimaryKeyJoinColumn(); } @@ -1673,9 +1678,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> secondaryTable.validate(messages, reporter); } this.validateInheritance(messages, reporter); - for (OrmSpecifiedPrimaryKeyJoinColumn pkJoinColumn : this.getSpecifiedPrimaryKeyJoinColumns()) { - pkJoinColumn.validate(messages, reporter); - } + this.validatePrimaryKeyJoinColumns(messages, reporter); this.attributeOverrideContainer.validate(messages, reporter); this.associationOverrideContainer.validate(messages, reporter); this.generatorContainer.validate(messages, reporter); @@ -1684,6 +1687,25 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> this.idClassReference.validate(messages, reporter); } + protected void validatePrimaryKeyJoinColumns(List<IMessage> messages, IReporter reporter) { + if (this.getPrimaryKeyJoinColumnsSize() > 0) { + if (this.getParentEntity() == null) { + messages.add( + this.buildValidationMessage( + this.getNameTextRange(), + JptJpaCoreValidationMessages.ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED, + this.getPersistentType().getName() + ) + ); + } else { + for (OrmSpecifiedPrimaryKeyJoinColumn pkJoinColumn : this.getSpecifiedPrimaryKeyJoinColumns()) { + pkJoinColumn.validate(messages, reporter); + } + } + } + + } + protected void validateEntityName(List<IMessage> messages) { if (StringTools.isBlank(this.getName())){ messages.add( diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/JavaEntityPrimaryKeyJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/JavaEntityPrimaryKeyJoinColumnValidator.java deleted file mode 100644 index c2e3236172..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/JavaEntityPrimaryKeyJoinColumnValidator.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 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.jpa.core.internal.jpa1.context.java; - -import java.util.List; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaEntity; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityPrimaryKeyJoinColumnValidator; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; - -public class JavaEntityPrimaryKeyJoinColumnValidator - extends EntityPrimaryKeyJoinColumnValidator -{ - protected final AbstractJavaEntity entity; - - public JavaEntityPrimaryKeyJoinColumnValidator( - BaseJoinColumn column, - BaseJoinColumn.ParentAdapter parentAdapter, - AbstractJavaEntity entity) { - super(column, parentAdapter); - this.entity = entity; - } - - @Override - protected void validateJoinColumnName(List<IMessage> messages) { - // Based on the spec., the PrimaryKeyJoinColumn annotation is really only meaningful when - // applying on an entity subclass so we only validate it when an entity is a descendant or an entity - // has specified primary key join columns - if (this.entity.isDescendant() || this.entity.getSpecifiedPrimaryKeyJoinColumnsSize() > 0) { - super.validateJoinColumnName(messages); - } - } -}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/validation/JptJpaCoreValidationMessages.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/validation/JptJpaCoreValidationMessages.java index e64f4de492..7272c06594 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/validation/JptJpaCoreValidationMessages.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/validation/JptJpaCoreValidationMessages.java @@ -72,6 +72,7 @@ public class JptJpaCoreValidationMessages { public static ValidationMessage TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML; public static ValidationMessage MANAGED_TYPE_UNRESOLVED_CLASS; public static ValidationMessage MANAGED_TYPE_UNSPECIFIED_CLASS; + public static ValidationMessage ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED; public static ValidationMessage TARGET_NOT_AN_EMBEDDABLE; public static ValidationMessage TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR; public static ValidationMessage TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/prefs/JpaProblemSeveritiesPage.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/prefs/JpaProblemSeveritiesPage.java index 0573bc8e29..77eba68c81 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/prefs/JpaProblemSeveritiesPage.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/prefs/JpaProblemSeveritiesPage.java @@ -117,10 +117,11 @@ public class JpaProblemSeveritiesPage this.addLabeledCombo(parent, JptJpaCoreValidationMessages.ENTITY_NO_PK); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.ENTITY_NON_ROOT_ID_ATTRIBUTE_SPECIFIED); //3.0 M7 this.addLabeledCombo(parent, JptJpaCoreValidationMessages.ENTITY_NON_ROOT_ID_CLASS_SPECIFIED); //3.0 M7 - this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML); - this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.MANAGED_TYPE_UNRESOLVED_CLASS); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.MANAGED_TYPE_UNSPECIFIED_CLASS); + this.addLabeledCombo(parent, JptJpaCoreValidationMessages.ROOT_ENTITY_HAS_PK_JOIN_COLUMN_DEFINED); + this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_ANNOTATED_BUT_NOT_LISTED_IN_PERSISTENCE_XML); + this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_MANAGED_BUT_NOT_LISTED_IN_PERSISTENCE_XML); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR); this.addLabeledCombo(parent, JptJpaCoreValidationMessages.TYPE_MAPPING_FINAL_CLASS); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaEntityTests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaEntityTests.java index 5749a5f356..7c4e60eb35 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaEntityTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaEntityTests.java @@ -20,9 +20,7 @@ import org.eclipse.jpt.common.utility.internal.iterable.IterableTools; import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools; import org.eclipse.jpt.jpa.core.MappingKeys; import org.eclipse.jpt.jpa.core.context.AccessType; -import org.eclipse.jpt.jpa.core.context.SpecifiedAssociationOverride; import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.SpecifiedAttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.BasicMapping; import org.eclipse.jpt.jpa.core.context.DiscriminatorType; @@ -30,30 +28,32 @@ import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.IdMapping; import org.eclipse.jpt.jpa.core.context.InheritanceType; -import org.eclipse.jpt.jpa.core.context.SpecifiedJoinColumn; +import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.jpa.core.context.JoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.JoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.MappedSuperclass; import org.eclipse.jpt.jpa.core.context.NamedNativeQuery; import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.context.OneToOneMapping; import org.eclipse.jpt.jpa.core.context.PersistentType; +import org.eclipse.jpt.jpa.core.context.SpecifiedAssociationOverride; +import org.eclipse.jpt.jpa.core.context.SpecifiedAttributeOverride; +import org.eclipse.jpt.jpa.core.context.SpecifiedJoinColumn; import org.eclipse.jpt.jpa.core.context.SpecifiedPrimaryKeyJoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.SpecifiedSecondaryTable; import org.eclipse.jpt.jpa.core.context.SpecifiedTable; +import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.VirtualAssociationOverride; import org.eclipse.jpt.jpa.core.context.VirtualAttributeOverride; -import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaEntity; import org.eclipse.jpt.jpa.core.context.java.JavaIdMapping; import org.eclipse.jpt.jpa.core.context.java.JavaNamedNativeQuery; import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType; +import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedAssociationOverride; +import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedSecondaryTable; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAssociationOverride; @@ -1453,7 +1453,9 @@ public class JavaEntityTests extends ContextModelTestCase } public void testPrimaryKeyJoinColumnsSize() throws Exception { - createTestEntityWithSecondaryTable(); + createTestEntity(); + createTestSubType(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); //just the default pkJoinColumn, so 1 @@ -1468,7 +1470,9 @@ public class JavaEntityTests extends ContextModelTestCase } public void testGetDefaultPrimaryKeyJoinColumn() throws Exception { - createTestEntityWithSecondaryTable(); + createTestEntity(); + createTestSubType(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); assertNotNull(getJavaEntity().getDefaultPrimaryKeyJoinColumn()); @@ -1650,7 +1654,9 @@ public class JavaEntityTests extends ContextModelTestCase } public void testPrimaryKeyJoinColumnIsVirtual() throws Exception { - createTestEntityWithSecondaryTable(); + createTestEntity(); + createTestSubType(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); assertTrue(getJavaEntity().getDefaultPrimaryKeyJoinColumn().isVirtual()); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaPrimaryKeyJoinColumnTests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaPrimaryKeyJoinColumnTests.java index 1450205638..dc6bc04414 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaPrimaryKeyJoinColumnTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/java/JavaPrimaryKeyJoinColumnTests.java @@ -11,8 +11,8 @@ package org.eclipse.jpt.jpa.core.tests.internal.context.java; import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement.AstNodeType; +import org.eclipse.jpt.common.core.resource.java.JavaResourceType; import org.eclipse.jpt.common.utility.internal.ObjectTools; import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools; import org.eclipse.jpt.jpa.core.MappingKeys; @@ -47,13 +47,39 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase }); } + private ICompilationUnit createTestSubEntity() throws Exception { + return this.createTestType(PACKAGE_NAME, "AnnotationTestTypeChild.java", "AnnotationTestTypeChild", new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return IteratorTools.iterator(JPA.ENTITY, JPA.ID); + } + @Override + public void appendExtendsImplementsTo(StringBuilder sb) { + sb.append("extends " + TYPE_NAME + " "); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append("@Id"); + } + }); + } + private ICompilationUnit createTestEntityWithPrimaryKeyJoinColumn() throws Exception { - return this.createTestType(new DefaultAnnotationWriter() { + return this.createTestType(PACKAGE_NAME, "AnnotationTestTypeChild.java", "AnnotationTestTypeChild", new DefaultAnnotationWriter() { @Override public Iterator<String> imports() { return IteratorTools.iterator(JPA.ENTITY, JPA.ID, JPA.PRIMARY_KEY_JOIN_COLUMN); } @Override + public void appendExtendsImplementsTo(StringBuilder sb) { + sb.append("extends " + TYPE_NAME + " "); + } + @Override public void appendTypeAnnotationTo(StringBuilder sb) { sb.append("@Entity").append(CR); sb.append("@PrimaryKeyJoinColumn(name=\"" + PRIMARY_KEY_JOIN_COLUMN_NAME + "\")"); @@ -72,13 +98,13 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetSpecifiedName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertEquals(PRIMARY_KEY_JOIN_COLUMN_NAME, specifiedPkJoinColumn.getSpecifiedName()); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation pkJoinColumnResource = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); pkJoinColumnResource.setName("FOO"); @@ -89,6 +115,8 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetDefaultNameNoSpecifiedPrimaryKeyJoinColumns() throws Exception { createTestEntity(); + createTestSubEntity(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); SpecifiedPrimaryKeyJoinColumn pkJoinColumn = getJavaEntity().getDefaultPrimaryKeyJoinColumn(); @@ -97,7 +125,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetDefaultName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); assertNull(getJavaEntity().getDefaultPrimaryKeyJoinColumn()); @@ -113,7 +141,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertEquals(PRIMARY_KEY_JOIN_COLUMN_NAME, specifiedPkJoinColumn.getName()); @@ -121,14 +149,14 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testSetSpecifiedName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); specifiedPkJoinColumn.setSpecifiedName("foo"); assertEquals("foo", specifiedPkJoinColumn.getSpecifiedName()); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation columnAnnotation = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); assertEquals("foo", columnAnnotation.getName()); @@ -141,12 +169,12 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetColumnDefinition() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); - + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); + SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertNull(specifiedPkJoinColumn.getColumnDefinition()); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation column = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); column.setColumnDefinition(COLUMN_DEFINITION); getJpaProject().synchronizeContextModel(); @@ -166,12 +194,12 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testSetColumnDefinition() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); specifiedPkJoinColumn.setColumnDefinition("foo"); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation column = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); assertEquals("foo", column.getColumnDefinition()); @@ -183,12 +211,12 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetSpecifiedReferencedColumnName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertNull(specifiedPkJoinColumn.getSpecifiedReferencedColumnName()); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation pkJoinColumnResource = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); pkJoinColumnResource.setReferencedColumnName("FOO"); @@ -199,15 +227,17 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetDefaultReferencedColumnNameNoSpecifiedPrimaryKeyJoinColumns() throws Exception { createTestEntity(); + createTestSubEntity(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); - + SpecifiedPrimaryKeyJoinColumn pkJoinColumn = getJavaEntity().getDefaultPrimaryKeyJoinColumn(); assertEquals("id", pkJoinColumn.getDefaultReferencedColumnName()); } public void testGetDefaultReferencedColumnName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); assertNull(getJavaEntity().getDefaultPrimaryKeyJoinColumn()); @@ -224,9 +254,9 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testGetReferencedColumnName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation pkJoinColumnResource = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); pkJoinColumnResource.setReferencedColumnName("FOO"); @@ -238,14 +268,14 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testSetSpecifiedReferencedColumnName() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); specifiedPkJoinColumn.setSpecifiedReferencedColumnName("foo"); assertEquals("foo", specifiedPkJoinColumn.getSpecifiedReferencedColumnName()); - JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE); + JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(PACKAGE_NAME + ".AnnotationTestTypeChild", AstNodeType.TYPE); PrimaryKeyJoinColumnAnnotation columnAnnotation = (PrimaryKeyJoinColumnAnnotation) resourceType.getAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN); assertEquals("foo", columnAnnotation.getReferencedColumnName()); @@ -258,9 +288,11 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase } public void testIsVirtual() throws Exception { + createTestEntity(); createTestEntityWithPrimaryKeyJoinColumn(); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); - + SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertFalse(specifiedPkJoinColumn.isVirtual()); @@ -271,7 +303,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testIsReferencedColumnResolved() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertFalse(((Boolean) ObjectTools.execute(specifiedPkJoinColumn, "referencedColumnIsResolved")).booleanValue()); @@ -279,7 +311,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testDbColumn() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertFalse(specifiedPkJoinColumn.isResolved()); @@ -287,7 +319,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testDbReferencedColumn() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertFalse(((Boolean) ObjectTools.execute(specifiedPkJoinColumn, "referencedColumnIsResolved")).booleanValue()); @@ -295,7 +327,7 @@ public class JavaPrimaryKeyJoinColumnTests extends ContextModelTestCase public void testDbTable() throws Exception { createTestEntityWithPrimaryKeyJoinColumn(); - addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); SpecifiedPrimaryKeyJoinColumn specifiedPkJoinColumn = getJavaEntity().getSpecifiedPrimaryKeyJoinColumns().iterator().next(); assertNull(specifiedPkJoinColumn.getDbTable()); |