diff options
author | kmoore | 2010-06-24 18:54:20 +0000 |
---|---|---|
committer | kmoore | 2010-06-24 18:54:20 +0000 |
commit | e6d5ce3503391753eff446be0d4d2748507031a9 (patch) | |
tree | 3db2ad0cc93de6177af353e7c272042fba526393 /jpa/tests/org.eclipse.jpt.core.tests | |
parent | 3b916f1f1e82a0ff464d037bb27329fa0eb8d0cd (diff) | |
download | webtools.dali-e6d5ce3503391753eff446be0d4d2748507031a9.tar.gz webtools.dali-e6d5ce3503391753eff446be0d4d2748507031a9.tar.xz webtools.dali-e6d5ce3503391753eff446be0d4d2748507031a9.zip |
312905 - fixing some incorrect defaults on virtual ORM attribute mappings
Diffstat (limited to 'jpa/tests/org.eclipse.jpt.core.tests')
7 files changed, 565 insertions, 7 deletions
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.core.tests/META-INF/MANIFEST.MF index 607ec62623..cc390402dd 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/META-INF/MANIFEST.MF +++ b/jpa/tests/org.eclipse.jpt.core.tests/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-SymbolicName: org.eclipse.jpt.core.tests;singleton:=true -Bundle-Version: 2.3.0.qualifier +Bundle-Version: 2.3.1.qualifier Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: J2SE-1.5 Require-Bundle: org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)", diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmManyToManyMappingTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmManyToManyMappingTests.java index d9a17740cf..90035a7301 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmManyToManyMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmManyToManyMappingTests.java @@ -15,6 +15,7 @@ import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; import org.eclipse.jpt.core.context.BasicMapping; +import org.eclipse.jpt.core.context.Cascade; import org.eclipse.jpt.core.context.EmbeddedIdMapping; import org.eclipse.jpt.core.context.EmbeddedMapping; import org.eclipse.jpt.core.context.FetchType; @@ -220,8 +221,32 @@ public class OrmManyToManyMappingTests extends ContextModelTestCase }; this.javaProject.createCompilationUnit(PACKAGE_NAME, "State.java", sourceWriter); } - - + + private ICompilationUnit createTestEntityManyToManyMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.MANY_TO_MANY, JPA.FETCH_TYPE, JPA.CASCADE_TYPE, JPA.ORDER_BY); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @ManyToMany(fetch=FetchType.EAGER, targetEntity=Address.class, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH})"); + sb.append(CR); + sb.append(" @OrderBy(\"city\""); + sb.append(CR); + sb.append(" private java.util.Collection<Address> address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + @Override protected void setUp() throws Exception { super.setUp(); @@ -977,4 +1002,64 @@ public class OrmManyToManyMappingTests extends ContextModelTestCase mapKeyNames = ormManyToManyMapping.candidateMapKeyNames(); assertEquals(false, mapKeyNames.hasNext()); } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityManyToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmManyToManyMapping ormManyToManyMapping = (OrmManyToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToManyMapping.getName()); + assertEquals(FetchType.EAGER, ormManyToManyMapping.getSpecifiedFetch()); + assertEquals("Address", ormManyToManyMapping.getSpecifiedTargetEntity()); + assertNull(ormManyToManyMapping.getRelationshipReference(). + getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade cascade = ormManyToManyMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + + assertTrue(ormManyToManyMapping.getOrderable().isCustomOrdering()); + assertEquals("city", ormManyToManyMapping.getOrderable().getSpecifiedOrderBy()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityManyToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmManyToManyMapping ormManyToManyMapping = (OrmManyToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToManyMapping.getName()); + assertEquals(FetchType.LAZY, ormManyToManyMapping.getFetch()); + assertEquals("test.Address", ormManyToManyMapping.getTargetEntity()); + assertNull(ormManyToManyMapping.getRelationshipReference().getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade cascade = ormManyToManyMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + + assertTrue(ormManyToManyMapping.getOrderable().isNoOrdering()); + assertEquals(null, ormManyToManyMapping.getOrderable().getSpecifiedOrderBy()); + } }
\ No newline at end of file diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmOneToManyMappingTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmOneToManyMappingTests.java index 71d53188f4..da871ebced 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmOneToManyMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmOneToManyMappingTests.java @@ -15,6 +15,7 @@ import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; import org.eclipse.jpt.core.context.BasicMapping; +import org.eclipse.jpt.core.context.Cascade; import org.eclipse.jpt.core.context.EmbeddedIdMapping; import org.eclipse.jpt.core.context.EmbeddedMapping; import org.eclipse.jpt.core.context.FetchType; @@ -195,7 +196,32 @@ public class OrmOneToManyMappingTests extends ContextModelTestCase }; this.javaProject.createCompilationUnit(PACKAGE_NAME, "State.java", sourceWriter); } - + + private ICompilationUnit createTestEntityOneToManyMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.ONE_TO_MANY, JPA.FETCH_TYPE, JPA.CASCADE_TYPE, JPA.ORDER_BY); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @OneToMany(fetch=FetchType.EAGER, targetEntity=Address.class, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH})"); + sb.append(CR); + sb.append(" @OrderBy(\"city\""); + sb.append(CR); + sb.append(" private java.util.Collection<Address> address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + @Override protected void setUp() throws Exception { super.setUp(); @@ -970,4 +996,64 @@ public class OrmOneToManyMappingTests extends ContextModelTestCase mapKeyNames = ormOneToManyMapping.candidateMapKeyNames(); assertEquals(false, mapKeyNames.hasNext()); } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityOneToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmOneToManyMapping ormOneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToManyMapping.getName()); + assertEquals(FetchType.EAGER, ormOneToManyMapping.getSpecifiedFetch()); + assertEquals("Address", ormOneToManyMapping.getSpecifiedTargetEntity()); + assertNull(ormOneToManyMapping.getRelationshipReference(). + getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade cascade = ormOneToManyMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + + assertTrue(ormOneToManyMapping.getOrderable().isCustomOrdering()); + assertEquals("city", ormOneToManyMapping.getOrderable().getSpecifiedOrderBy()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityOneToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmOneToManyMapping ormOneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToManyMapping.getName()); + assertEquals(FetchType.LAZY, ormOneToManyMapping.getFetch()); + assertEquals("test.Address", ormOneToManyMapping.getTargetEntity()); + assertNull(ormOneToManyMapping.getRelationshipReference().getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade cascade = ormOneToManyMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + + assertTrue(ormOneToManyMapping.getOrderable().isNoOrdering()); + assertEquals(null, ormOneToManyMapping.getOrderable().getSpecifiedOrderBy()); + } }
\ No newline at end of file diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java index ae4d96a26e..050ac87737 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java @@ -16,6 +16,7 @@ import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; import org.eclipse.jpt.core.context.Column; import org.eclipse.jpt.core.context.Entity; +import org.eclipse.jpt.core.context.FetchType; import org.eclipse.jpt.core.context.ManyToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; import org.eclipse.jpt.core.context.java.JavaManyToManyMapping; @@ -23,6 +24,7 @@ import org.eclipse.jpt.core.context.orm.OrmEntity; import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.jpa2.context.Cascade2_0; import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; import org.eclipse.jpt.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaManyToManyMapping2_0; @@ -202,7 +204,32 @@ public class GenericOrmManyToManyMapping2_0Tests }; this.javaProject.createCompilationUnit(PACKAGE_NAME, "State.java", sourceWriter); } - + + private ICompilationUnit createTestEntityManyToManyMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.MANY_TO_MANY, JPA.FETCH_TYPE, JPA.CASCADE_TYPE, JPA.ORDER_BY); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @ManyToMany(fetch=FetchType.EAGER, targetEntity=Address.class, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH})"); + sb.append(CR); + sb.append(" @OrderBy(\"city\""); + sb.append(CR); + sb.append(" private java.util.Collection<Address> address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + public void testCandidateMappedByAttributeNames() throws Exception { createTestEntityWithValidManyToManyMapping(); createTestTargetEntityAddress(); @@ -846,4 +873,66 @@ public class GenericOrmManyToManyMapping2_0Tests assertNull(ormColumn.getSpecifiedTable()); assertEquals("ORM_TABLE_Address", ormColumn.getDefaultTable()); } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityManyToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmManyToManyMapping ormManyToManyMapping = (OrmManyToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToManyMapping.getName()); + assertEquals(FetchType.EAGER, ormManyToManyMapping.getSpecifiedFetch()); + assertEquals("Address", ormManyToManyMapping.getSpecifiedTargetEntity()); + assertNull(ormManyToManyMapping.getRelationshipReference(). + getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade2_0 cascade = ormManyToManyMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + assertTrue(cascade.isDetach()); + + assertTrue(ormManyToManyMapping.getOrderable().isCustomOrdering()); + assertEquals("city", ormManyToManyMapping.getOrderable().getSpecifiedOrderBy()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityManyToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmManyToManyMapping ormManyToManyMapping = (OrmManyToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToManyMapping.getName()); + assertEquals(FetchType.LAZY, ormManyToManyMapping.getFetch()); + assertEquals("test.Address", ormManyToManyMapping.getTargetEntity()); + assertNull(ormManyToManyMapping.getRelationshipReference().getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade2_0 cascade = ormManyToManyMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + assertFalse(cascade.isDetach()); + + assertTrue(ormManyToManyMapping.getOrderable().isNoOrdering()); + assertEquals(null, ormManyToManyMapping.getOrderable().getSpecifiedOrderBy()); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java index bb9d5522bd..ebc5cc2b74 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java @@ -13,14 +13,17 @@ package org.eclipse.jpt.core.tests.internal.jpa2.context.orm; import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.MappingKeys; +import org.eclipse.jpt.core.context.FetchType; import org.eclipse.jpt.core.context.java.JavaEntity; import org.eclipse.jpt.core.context.java.JavaJoinColumn; import org.eclipse.jpt.core.context.java.JavaJoinTable; import org.eclipse.jpt.core.context.orm.OrmEntity; import org.eclipse.jpt.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.core.context.orm.OrmJoinTable; +import org.eclipse.jpt.core.context.orm.OrmManyToOneMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.jpa2.context.Cascade2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaManyToOneMapping2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmDerivedIdentity2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmManyToOneMapping2_0; @@ -174,7 +177,32 @@ public class GenericOrmManyToOneMapping2_0Tests }; this.javaProject.createCompilationUnit(PACKAGE_NAME, "Address.java", sourceWriter); } - + + private ICompilationUnit createTestEntityManyToOneMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.MANY_TO_ONE, JPA.JOIN_COLUMN, JPA.FETCH_TYPE, JPA.CASCADE_TYPE); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @ManyToOne(fetch=FetchType.LAZY, optional=false, targetEntity=Address.class, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH})"); + sb.append(CR); + sb.append(" @JoinColumn(name=\"MY_COLUMN\", referencedColumnName=\"MY_REFERENCED_COLUMN\", unique=true, nullable=false, insertable=false, updatable=false, columnDefinition=\"COLUMN_DEFINITION\", table=\"MY_TABLE\")"); + sb.append(CR); + sb.append(" private Address address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + public void testUpdateId() throws Exception { createTestEntityWithIdDerivedIdentity(); OrmPersistentType contextType = getEntityMappings().getPersistentType(FULLY_QUALIFIED_TYPE_NAME); @@ -573,4 +601,69 @@ public class GenericOrmManyToOneMapping2_0Tests assertFalse(relationshipReference.usesJoinColumnJoiningStrategy()); assertTrue(relationshipReference.usesJoinTableJoiningStrategy()); } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityManyToOneMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmManyToOneMapping ormManyToOneMapping = (OrmManyToOneMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToOneMapping.getName()); + assertEquals(FetchType.LAZY, ormManyToOneMapping.getSpecifiedFetch()); + assertEquals(Boolean.FALSE, ormManyToOneMapping.getSpecifiedOptional()); + assertEquals("Address", ormManyToOneMapping.getSpecifiedTargetEntity()); + + OrmJoinColumn ormJoinColumn = ormManyToOneMapping.getRelationshipReference().getJoinColumnJoiningStrategy().specifiedJoinColumns().next(); + assertEquals("MY_COLUMN", ormJoinColumn.getSpecifiedName()); + assertEquals("MY_REFERENCED_COLUMN", ormJoinColumn.getSpecifiedReferencedColumnName()); + assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUnique()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedNullable()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedInsertable()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUpdatable()); + assertEquals("COLUMN_DEFINITION", ormJoinColumn.getColumnDefinition()); + assertEquals("MY_TABLE", ormJoinColumn.getSpecifiedTable()); + + Cascade2_0 cascade = ormManyToOneMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + assertTrue(cascade.isDetach()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityManyToOneMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmManyToOneMapping ormManyToOneMapping = (OrmManyToOneMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormManyToOneMapping.getName()); + assertEquals(FetchType.EAGER, ormManyToOneMapping.getDefaultFetch()); + assertEquals(true, ormManyToOneMapping.isDefaultOptional()); + assertEquals("test.Address", ormManyToOneMapping.getDefaultTargetEntity()); + + Cascade2_0 cascade = ormManyToOneMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + assertFalse(cascade.isDetach()); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java index 9e1e1edd01..a1f3df8364 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java @@ -15,6 +15,7 @@ import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; import org.eclipse.jpt.core.context.Column; import org.eclipse.jpt.core.context.Entity; +import org.eclipse.jpt.core.context.FetchType; import org.eclipse.jpt.core.context.JoinColumn; import org.eclipse.jpt.core.context.OneToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; @@ -24,6 +25,7 @@ import org.eclipse.jpt.core.context.orm.OrmEntity; import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.jpa2.context.Cascade2_0; import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0; import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; import org.eclipse.jpt.core.jpa2.context.Orderable2_0; @@ -238,6 +240,31 @@ public class GenericOrmOneToManyMapping2_0Tests }); } + private ICompilationUnit createTestEntityOneToManyMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.ONE_TO_MANY, JPA.FETCH_TYPE, JPA.CASCADE_TYPE, JPA.ORDER_BY); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @OneToMany(fetch=FetchType.EAGER, targetEntity=Address.class, orphanRemoval = true, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH})"); + sb.append(CR); + sb.append(" @OrderBy(\"city\""); + sb.append(CR); + sb.append(" private java.util.Collection<Address> address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + public void testCandidateMappedByAttributeNames() throws Exception { createTestEntityWithValidOneToManyMapping(); createTestTargetEntityAddress(); @@ -1122,4 +1149,70 @@ public class GenericOrmOneToManyMapping2_0Tests assertEquals("addresses_ORDER", orderColumn.getName()); assertEquals("ORM_ADDRESS_PRIMARY_TABLE", orderColumn.getTable());//target table name } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityOneToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmOneToManyMapping ormOneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToManyMapping.getName()); + assertEquals(FetchType.EAGER, ormOneToManyMapping.getSpecifiedFetch()); + assertEquals("Address", ormOneToManyMapping.getSpecifiedTargetEntity()); + assertNull(ormOneToManyMapping.getRelationshipReference(). + getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade2_0 cascade = ormOneToManyMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + assertTrue(cascade.isDetach()); + + assertTrue(ormOneToManyMapping.getOrderable().isCustomOrdering()); + assertEquals("city", ormOneToManyMapping.getOrderable().getSpecifiedOrderBy()); + + assertTrue(((OrmOrphanRemovalHolder2_0) ormOneToManyMapping).getOrphanRemoval().isOrphanRemoval()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityOneToManyMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmOneToManyMapping ormOneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToManyMapping.getName()); + assertEquals(FetchType.LAZY, ormOneToManyMapping.getFetch()); + assertEquals("test.Address", ormOneToManyMapping.getTargetEntity()); + assertNull(ormOneToManyMapping.getRelationshipReference().getMappedByJoiningStrategy().getMappedByAttribute()); + + Cascade2_0 cascade = ormOneToManyMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + assertFalse(cascade.isDetach()); + + assertTrue(ormOneToManyMapping.getOrderable().isNoOrdering()); + assertEquals(null, ormOneToManyMapping.getOrderable().getSpecifiedOrderBy()); + + assertFalse(((OrmOrphanRemovalHolder2_0) ormOneToManyMapping).getOrphanRemoval().isOrphanRemoval()); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java index 4535430ae8..71e839a07a 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java @@ -13,6 +13,7 @@ import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; +import org.eclipse.jpt.core.context.FetchType; import org.eclipse.jpt.core.context.OneToOneMapping; import org.eclipse.jpt.core.context.PersistentAttribute; import org.eclipse.jpt.core.context.java.JavaEntity; @@ -23,6 +24,7 @@ import org.eclipse.jpt.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.core.context.orm.OrmJoinTable; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.jpa2.context.Cascade2_0; import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmDerivedIdentity2_0; @@ -238,7 +240,32 @@ public class GenericOrmOneToOneMapping2_0Tests each.makeSpecified(); } } - + + private ICompilationUnit createTestEntityOneToOneMapping() throws Exception { + return this.createTestType(new DefaultAnnotationWriter() { + @Override + public Iterator<String> imports() { + return new ArrayIterator<String>(JPA.ENTITY, JPA.ONE_TO_ONE, JPA.JOIN_COLUMN, JPA.FETCH_TYPE, JPA.CASCADE_TYPE); + } + @Override + public void appendTypeAnnotationTo(StringBuilder sb) { + sb.append("@Entity"); + } + + @Override + public void appendIdFieldAnnotationTo(StringBuilder sb) { + sb.append(CR); + sb.append(" @OneToOne(fetch=FetchType.LAZY, optional=false, targetEntity=Address.class, orphanRemoval = true, cascade={CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH})"); + sb.append(CR); + sb.append(" @JoinColumn(name=\"MY_COLUMN\", referencedColumnName=\"MY_REFERENCED_COLUMN\", unique=true, nullable=false, insertable=false, updatable=false, columnDefinition=\"COLUMN_DEFINITION\", table=\"MY_TABLE\")"); + sb.append(CR); + sb.append(" private Address address;").append(CR); + sb.append(CR); + sb.append(" @Id"); + } + }); + } + public void testUpdateId() throws Exception { createTestEntityWithIdDerivedIdentity(); OrmPersistentType contextType = getEntityMappings().getPersistentType(FULLY_QUALIFIED_TYPE_NAME); @@ -870,4 +897,89 @@ public class GenericOrmOneToOneMapping2_0Tests assertFalse(relationshipReference.usesMappedByJoiningStrategy()); assertFalse(relationshipReference.usesJoinTableJoiningStrategy()); } + + public void testVirtualMappingMetadataCompleteFalse() throws Exception { + createTestEntityOneToOneMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); + + OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToOneMapping.getName()); + assertEquals(FetchType.LAZY, ormOneToOneMapping.getSpecifiedFetch()); + assertEquals(Boolean.FALSE, ormOneToOneMapping.getSpecifiedOptional()); + assertEquals("Address", ormOneToOneMapping.getSpecifiedTargetEntity()); + assertNull(ormOneToOneMapping.getRelationshipReference(). + getMappedByJoiningStrategy().getMappedByAttribute()); + + OrmJoinColumn ormJoinColumn = + ormOneToOneMapping.getRelationshipReference().getJoinColumnJoiningStrategy().specifiedJoinColumns().next(); + assertEquals("MY_COLUMN", ormJoinColumn.getSpecifiedName()); + assertEquals("MY_REFERENCED_COLUMN", ormJoinColumn.getSpecifiedReferencedColumnName()); + assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUnique()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedNullable()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedInsertable()); + assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUpdatable()); + assertEquals("COLUMN_DEFINITION", ormJoinColumn.getColumnDefinition()); + assertEquals("MY_TABLE", ormJoinColumn.getSpecifiedTable()); + + Cascade2_0 cascade = ormOneToOneMapping.getCascade(); + assertTrue(cascade.isAll()); + assertTrue(cascade.isMerge()); + assertTrue(cascade.isPersist()); + assertTrue(cascade.isRemove()); + assertTrue(cascade.isRefresh()); + assertTrue(cascade.isDetach()); + + assertTrue(((OrmOrphanRemovalHolder2_0) ormOneToOneMapping).getOrphanRemoval().isOrphanRemoval()); + } + + public void testVirtualMappingMetadataCompleteTrue() throws Exception { + createTestEntityOneToOneMapping(); + createTestTargetEntityAddress(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address"); + ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); + assertEquals(3, ormPersistentType.virtualAttributesSize()); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("address"); + + assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); + assertTrue(ormPersistentAttribute.isVirtual()); + + ormPersistentAttribute.makeSpecified(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); + ormPersistentAttribute= ormPersistentType.specifiedAttributes().next(); + + OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping(); + assertEquals("address", ormOneToOneMapping.getName()); + assertEquals(FetchType.EAGER, ormOneToOneMapping.getFetch()); + assertEquals(true, ormOneToOneMapping.isOptional()); + assertEquals("test.Address", ormOneToOneMapping.getTargetEntity()); + assertNull(ormOneToOneMapping.getRelationshipReference().getMappedByJoiningStrategy().getMappedByAttribute()); + + //TODO default join columns in xml one-to-one +// XmlJoinColumn ormJoinColumn = ormOneToOneMapping.specifiedJoinColumns().next(); +// //TODO java default columns name in JavaSingleRelationshipMapping.JoinColumnOwner +// //assertEquals("address", ormJoinColumn.getSpecifiedName()); +// //assertEquals("address", ormJoinColumn.getSpecifiedReferencedColumnName()); +// assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUnique()); +// assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedNullable()); +// assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedInsertable()); +// assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUpdatable()); +// assertNull(ormJoinColumn.getColumnDefinition()); +// assertEquals(TYPE_NAME, ormJoinColumn.getSpecifiedTable()); + + Cascade2_0 cascade = ormOneToOneMapping.getCascade(); + assertFalse(cascade.isAll()); + assertFalse(cascade.isMerge()); + assertFalse(cascade.isPersist()); + assertFalse(cascade.isRemove()); + assertFalse(cascade.isRefresh()); + assertFalse(cascade.isDetach()); + + assertFalse(((OrmOrphanRemovalHolder2_0) ormOneToOneMapping).getOrphanRemoval().isOrphanRemoval()); + } } |