Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2012-05-04 07:03:48 +0000
committerMartin Taal2012-05-04 07:03:48 +0000
commit4a88cbc575c574569c31fd6180631a6ac1bb0342 (patch)
treedd51bbb3da48a0f9a25998a1b43caf2dcff528f0
parent6467f41ef4f97ea8d968ada6637eb1764acb5e37 (diff)
downloadorg.eclipse.emf.teneo-4a88cbc575c574569c31fd6180631a6ac1bb0342.tar.gz
org.eclipse.emf.teneo-4a88cbc575c574569c31fd6180631a6ac1bb0342.tar.xz
org.eclipse.emf.teneo-4a88cbc575c574569c31fd6180631a6ac1bb0342.zip
Implemented testcase for jpa2 orphanRemoval attribute
-rwxr-xr-xcore/org.eclipse.emf.teneo/src/org/eclipse/emf/teneo/annotations/mapper/OneToOneReferenceAnnotator.java4
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/AbstractAssociationMapper.java9
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyAttributeMapper.java2
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyExternalReferenceMapper.java2
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToManyMapper.java2
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToOneMapper.java2
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToManyMapper.java4
-rwxr-xr-xhibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToOneMapper.java8
-rw-r--r--hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/TypedEReferenceMapper.java2
-rw-r--r--tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_e_o_hibernate.hbm.xml52
-rw-r--r--tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_h_o_hibernate.hbm.xml61
-rwxr-xr-xtests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/AllTests.java2
-rwxr-xr-xtests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/AllTests.java67
-rwxr-xr-xtests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/OrphanRemovalAction.java117
-rwxr-xr-xtests/org.eclipse.emf.teneo.samples/META-INF/MANIFEST.MF3
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Address.java54
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Employee.java103
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/EmployeeInfo.java110
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalFactory.java64
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalPackage.java400
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/AddressImpl.java165
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeImpl.java324
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeInfoImpl.java336
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalFactoryImpl.java121
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalPackageImpl.java328
-rwxr-xr-xtests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.ecore38
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.genmodel24
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalAdapterFactory.java160
-rw-r--r--tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalSwitch.java156
29 files changed, 2706 insertions, 14 deletions
diff --git a/core/org.eclipse.emf.teneo/src/org/eclipse/emf/teneo/annotations/mapper/OneToOneReferenceAnnotator.java b/core/org.eclipse.emf.teneo/src/org/eclipse/emf/teneo/annotations/mapper/OneToOneReferenceAnnotator.java
index f9f8c406c..ad49cb5cb 100755
--- a/core/org.eclipse.emf.teneo/src/org/eclipse/emf/teneo/annotations/mapper/OneToOneReferenceAnnotator.java
+++ b/core/org.eclipse.emf.teneo/src/org/eclipse/emf/teneo/annotations/mapper/OneToOneReferenceAnnotator.java
@@ -76,6 +76,10 @@ public class OneToOneReferenceAnnotator extends BaseEFeatureAnnotator implements
oto.setMappedBy(eReference.getEOpposite().getName());
}
+ if (eReference.isContainment() && getPersistenceOptions().isSetCascadeAllOnContainment()) {
+ oto.setOrphanRemoval(true);
+ }
+
if (getPersistenceOptions().isSetForeignKeyNames() && aReference.getForeignKey() == null) {
// See bugzilla 211798: handle a specific case when this is a
// bidirectional
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/AbstractAssociationMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/AbstractAssociationMapper.java
index 8592b591f..03e206345 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/AbstractAssociationMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/AbstractAssociationMapper.java
@@ -89,11 +89,12 @@ public abstract class AbstractAssociationMapper extends AbstractMapper {
// translates jpa CascadeType to HbCascadeType
protected List<HbCascadeType> getCascades(Cascade cascade,
- List<CascadeType> cascades) {
- if (cascade != null) {
- return cascade.getValue();
+ List<CascadeType> cascades, boolean orphanRemoval) {
+ final List<HbCascadeType> result = cascade != null ? cascade.getValue() : convertCascade(cascades);
+ if (orphanRemoval && !(result.contains(HbCascadeType.ALL) || result.contains(HbCascadeType.DELETE_ORPHAN))) {
+ result.add(HbCascadeType.DELETE_ORPHAN);
}
- return convertCascade(cascades);
+ return result;
}
protected List<HbCascadeType> convertCascade(List<CascadeType> cascades) {
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyAttributeMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyAttributeMapper.java
index aba48cb91..836858d57 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyAttributeMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyAttributeMapper.java
@@ -86,7 +86,7 @@ public class ManyAttributeMapper extends AbstractAssociationMapper implements Ex
if (!isArray) {
addFetchType(collElement, otm.getFetch());
}
- addCascadesForMany(collElement, getCascades(hbAttribute.getHbCascade(), otm.getCascade()));
+ addCascadesForMany(collElement, getCascades(hbAttribute.getHbCascade(), otm.getCascade(), false));
if (FeatureMapUtil.isFeatureMap(paAttribute.getModelEAttribute())) {
if (getHbmContext().getPersistenceOptions().isMapFeatureMapAsComponent()) {
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyExternalReferenceMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyExternalReferenceMapper.java
index 2cb976aae..860c2e548 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyExternalReferenceMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyExternalReferenceMapper.java
@@ -66,7 +66,7 @@ public class ManyExternalReferenceMapper extends AbstractAssociationMapper
addFetchType(collElement, otm.getFetch());
addCascadesForMany(collElement, getCascades(hbReference.getHbCascade(),
- otm.getCascade()));
+ otm.getCascade(), false));
addElementElement(collElement, paReference, getColumns(paReference),
otm.getTargetEntity());
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToManyMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToManyMapper.java
index aab8029df..74ec6e4c0 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToManyMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToManyMapper.java
@@ -80,7 +80,7 @@ public class ManyToManyMapper extends AbstractAssociationMapper implements
addFetchType(collElement, mtm.getFetch());
addCascades(collElement,
- getCascades(hbReference.getHbCascade(), mtm.getCascade()),
+ getCascades(hbReference.getHbCascade(), mtm.getCascade(), false),
false);
final PAnnotatedEClass referedToAClass = hbReference
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToOneMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToOneMapper.java
index 4d2c7a082..4b2481942 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToOneMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/ManyToOneMapper.java
@@ -135,7 +135,7 @@ public class ManyToOneMapper extends AbstractAssociationMapper implements
if (!isProperty) {
addCascadesForSingle(associationElement,
- getCascades(hbReference.getHbCascade(), mto.getCascade()));
+ getCascades(hbReference.getHbCascade(), mto.getCascade(), false));
}
if (hbReference.getHbFetch() != null) {
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToManyMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToManyMapper.java
index 7cf657cf0..cac9ab993 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToManyMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToManyMapper.java
@@ -160,7 +160,7 @@ public class OneToManyMapper extends AbstractAssociationMapper implements
addFetchType(collElement, (null != coe) ? coe.getFetch() : otm
.getFetch());
addCascadesForMany(collElement, getCascades(hbReference.getHbCascade(),
- otm.getCascade()));
+ otm.getCascade(), otm.isOrphanRemoval()));
List<JoinColumn> inverseJoinColumns = jt != null
&& jt.getInverseJoinColumns() != null ? jt
.getInverseJoinColumns() : new ArrayList<JoinColumn>();
@@ -277,7 +277,7 @@ public class OneToManyMapper extends AbstractAssociationMapper implements
addFetchType(collElement, otm.getFetch());
addCascadesForMany(collElement, getCascades(hbReference.getHbCascade(),
- otm.getCascade()));
+ otm.getCascade(), otm.isOrphanRemoval()));
boolean isMap = StoreUtil.isMap(eref)
&& getHbmContext().isMapEMapAsTrueMap();
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToOneMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToOneMapper.java
index 1b72a3149..6c49b6abc 100755
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToOneMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/OneToOneMapper.java
@@ -10,6 +10,8 @@ package org.eclipse.emf.teneo.hibernate.mapper;
import java.util.List;
+import javax.print.attribute.standard.MediaSize.ISO;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.emf.ecore.EReference;
@@ -118,7 +120,7 @@ public class OneToOneMapper extends AbstractAssociationMapper implements
addAccessor(associationElement);
addCascadesForSingle(associationElement,
- getCascades(hbReference.getHbCascade(), oto.getCascade()));
+ getCascades(hbReference.getHbCascade(), oto.getCascade(), false));
final boolean isNullable = (oto.isOptional()
|| getHbmContext().isDoForceOptional(paReference) || getHbmContext()
@@ -169,8 +171,8 @@ public class OneToOneMapper extends AbstractAssociationMapper implements
addAccessor(associationElement);
addForeignKeyAttribute(associationElement, paReference);
- addCascadesForSingle(associationElement,
- getCascades(hbReference.getHbCascade(), oto.getCascade()));
+ addCascades(associationElement,
+ getCascades(hbReference.getHbCascade(), oto.getCascade(), oto.isOrphanRemoval()), true);
addLazyProxy(associationElement, oto.getFetch(), paReference);
if (hbReference.getHbFetch() != null) {
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/TypedEReferenceMapper.java b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/TypedEReferenceMapper.java
index 307e84bd3..02efb2a4a 100644
--- a/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/TypedEReferenceMapper.java
+++ b/hibernate/org.eclipse.emf.teneo.hibernate.mapper/src/org/eclipse/emf/teneo/hibernate/mapper/TypedEReferenceMapper.java
@@ -72,7 +72,7 @@ public class TypedEReferenceMapper extends AbstractAssociationMapper implements
addFetchType(collElement, otm.getFetch());
addCascadesForMany(collElement,
- getCascades(hbReference.getHbCascade(), otm.getCascade()));
+ getCascades(hbReference.getHbCascade(), otm.getCascade(), otm.isOrphanRemoval()));
addElementElement(collElement, paEFeature, getColumns(paEFeature),
otm.getTargetEntity());
diff --git a/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_e_o_hibernate.hbm.xml b/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_e_o_hibernate.hbm.xml
new file mode 100644
index 000000000..474835443
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_e_o_hibernate.hbm.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping auto-import="false">
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl" entity-name="Employee" abstract="false" lazy="false" table="`EMPLOYEE`">
+ <meta attribute="eclassName" inherit="false">Employee</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id name="id" type="long" unsaved-value="0">
+ <column not-null="true" unique="false" name="`ID`"/>
+ </id>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <one-to-one name="employeeInfo" entity-name="EmployeeInfo" cascade="persist,save-update,lock,delete,delete-orphan" lazy="false" property-ref="employee"/>
+ <list name="addresses" lazy="true" cascade="persist,merge,refresh,save-update,lock,delete-orphan">
+ <key update="true" foreign-key="EMPLOYEE_ADDRESSES">
+ <column name="`EMPLOYEE_ADDRESSES_ID`" unique="false"/>
+ </key>
+ <list-index column="`EMPLOYEE_ADDRESSES_IDX`"/>
+ <one-to-many entity-name="Address"/>
+ </list>
+ </class>
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl" entity-name="EmployeeInfo" abstract="false" lazy="false" table="`EMPLOYEEINFO`">
+ <meta attribute="eclassName" inherit="false">EmployeeInfo</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id name="id" type="long" unsaved-value="0">
+ <column not-null="true" unique="false" name="`ID`"/>
+ <generator class="native"/>
+ </id>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+ <column not-null="false" unique="false" name="`NAME`"/>
+ </property>
+ <many-to-one name="employee" entity-name="Employee" cascade="merge,persist,save-update,lock,refresh" not-null="false" lazy="false" insert="true" update="true"/>
+ </class>
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl" entity-name="Address" abstract="false" lazy="false" table="`ADDRESS`">
+ <meta attribute="eclassName" inherit="false">Address</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id type="long" name="e_id" column="e_id" access="org.eclipse.emf.teneo.hibernate.mapping.identifier.IdentifierPropertyHandler">
+ <meta attribute="syntheticId" inherit="false">true</meta>
+ <generator class="native"/>
+ </id>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+ <column not-null="false" unique="false" name="`NAME`"/>
+ </property>
+ </class>
+</hibernate-mapping> \ No newline at end of file
diff --git a/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_h_o_hibernate.hbm.xml b/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_h_o_hibernate.hbm.xml
new file mode 100644
index 000000000..8238f1d72
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.hibernate.test/hbm/org.eclipse.emf.teneo.hibernate.test.emf.jpa2/OrphanRemovalAction_hsqldb_h_o_hibernate.hbm.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping auto-import="false">
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl" entity-name="Employee" abstract="false" lazy="false" discriminator-value="Employee" table="`EMPLOYEE`">
+ <meta attribute="eclassName" inherit="false">Employee</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id name="id" type="long" unsaved-value="0">
+ <column not-null="true" unique="false" name="`ID`"/>
+ </id>
+ <discriminator type="string">
+ <column name="`DTYPE`" index="EMPLOYEEDTYPE" length="255" not-null="true"/>
+ </discriminator>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <one-to-one name="employeeInfo" entity-name="EmployeeInfo" cascade="persist,save-update,lock,delete,delete-orphan" lazy="false" property-ref="employee"/>
+ <list name="addresses" lazy="true" cascade="persist,merge,refresh,save-update,lock,delete-orphan">
+ <key update="true" foreign-key="EMPLOYEE_ADDRESSES">
+ <column name="`EMPLOYEE_ADDRESSES_ID`" unique="false"/>
+ </key>
+ <list-index column="`EMPLOYEE_ADDRESSES_IDX`"/>
+ <one-to-many entity-name="Address"/>
+ </list>
+ </class>
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl" entity-name="EmployeeInfo" abstract="false" lazy="false" discriminator-value="EmployeeInfo" table="`EMPLOYEEINFO`">
+ <meta attribute="eclassName" inherit="false">EmployeeInfo</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id name="id" type="long" unsaved-value="0">
+ <column not-null="true" unique="false" name="`ID`"/>
+ <generator class="native"/>
+ </id>
+ <discriminator type="string">
+ <column name="`DTYPE`" index="EMPLOYEEINFODTYPE" length="255" not-null="true"/>
+ </discriminator>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+ <column not-null="false" unique="false" name="`NAME`"/>
+ </property>
+ <many-to-one name="employee" entity-name="Employee" cascade="merge,persist,save-update,lock,refresh" not-null="false" lazy="false" insert="true" update="true"/>
+ </class>
+ <class name="org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl" entity-name="Address" abstract="false" lazy="false" discriminator-value="Address" table="`ADDRESS`">
+ <meta attribute="eclassName" inherit="false">Address</meta>
+ <meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval</meta>
+ <id type="long" name="e_id" column="e_id" access="org.eclipse.emf.teneo.hibernate.mapping.identifier.IdentifierPropertyHandler">
+ <meta attribute="syntheticId" inherit="false">true</meta>
+ <generator class="native"/>
+ </id>
+ <discriminator type="string">
+ <column name="`DTYPE`" index="ADDRESSDTYPE" length="255" not-null="true"/>
+ </discriminator>
+ <version name="e_version" column="e_version" access="org.eclipse.emf.teneo.hibernate.mapping.property.VersionPropertyHandler">
+ <meta attribute="syntheticVersion" inherit="false">true</meta>
+ </version>
+ <property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+ <column not-null="false" unique="false" name="`NAME`"/>
+ </property>
+ </class>
+</hibernate-mapping> \ No newline at end of file
diff --git a/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/AllTests.java b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/AllTests.java
index 5572f2609..c95caea57 100755
--- a/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/AllTests.java
+++ b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/AllTests.java
@@ -29,6 +29,8 @@ public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("All tests for hibernate");
+ suite.addTest(org.eclipse.emf.teneo.hibernate.test.emf.jpa2.AllTests
+ .suite());
suite.addTest(org.eclipse.emf.teneo.hibernate.test.emf.sample.AllTests
.suite());
suite.addTest(org.eclipse.emf.teneo.hibernate.test.emf.detach.AllTests
diff --git a/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/AllTests.java b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/AllTests.java
new file mode 100755
index 000000000..be946a0aa
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/AllTests.java
@@ -0,0 +1,67 @@
+/**
+ * <copyright> Copyright (c) 2012 Springsite BV (The Netherlands) and others 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: Martin Taal </copyright> $Id:
+ * AllTests.java,v 1.36 2007/04/17 15:49:55 mtaal Exp $
+ */
+
+package org.eclipse.emf.teneo.hibernate.test.emf.jpa2;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.emf.teneo.hibernate.test.HibernateTestbed;
+import org.eclipse.emf.teneo.test.conf.MultiCfgTestSuite;
+import org.eclipse.emf.teneo.test.emf.annotations.AssociationOverrideAction;
+import org.eclipse.emf.teneo.test.emf.annotations.AttributeOverridesAction;
+import org.eclipse.emf.teneo.test.emf.annotations.BasicAction;
+import org.eclipse.emf.teneo.test.emf.annotations.BookAction;
+import org.eclipse.emf.teneo.test.emf.annotations.CascadeNotallAction;
+import org.eclipse.emf.teneo.test.emf.annotations.CompositeIdAction;
+import org.eclipse.emf.teneo.test.emf.annotations.DuplicatesAction;
+import org.eclipse.emf.teneo.test.emf.annotations.EDataTypeAction;
+import org.eclipse.emf.teneo.test.emf.annotations.EmbeddedAction;
+import org.eclipse.emf.teneo.test.emf.annotations.EmbeddedIdAction;
+import org.eclipse.emf.teneo.test.emf.annotations.EntityAction;
+import org.eclipse.emf.teneo.test.emf.annotations.ExternalAction;
+import org.eclipse.emf.teneo.test.emf.annotations.ForcedIdBagAction;
+import org.eclipse.emf.teneo.test.emf.annotations.HbMapKeysAction;
+import org.eclipse.emf.teneo.test.emf.annotations.IdAction;
+import org.eclipse.emf.teneo.test.emf.annotations.IdBagAction;
+import org.eclipse.emf.teneo.test.emf.annotations.InheritanceAnnotationAction;
+import org.eclipse.emf.teneo.test.emf.annotations.InheritanceAnnotationTablePerClassAction;
+import org.eclipse.emf.teneo.test.emf.annotations.IntegerDiscriminatorAction;
+import org.eclipse.emf.teneo.test.emf.annotations.LazyLibraryAction;
+import org.eclipse.emf.teneo.test.emf.annotations.LobAction;
+import org.eclipse.emf.teneo.test.emf.annotations.ManyToManyAction;
+import org.eclipse.emf.teneo.test.emf.annotations.MapKeyAction;
+import org.eclipse.emf.teneo.test.emf.annotations.MappedSuperClassAction;
+import org.eclipse.emf.teneo.test.emf.annotations.NaturalIdAction;
+import org.eclipse.emf.teneo.test.emf.annotations.OnetoonePKAction;
+import org.eclipse.emf.teneo.test.emf.annotations.OverrideSecondaryAction;
+import org.eclipse.emf.teneo.test.emf.annotations.PKeyJoinAction;
+import org.eclipse.emf.teneo.test.emf.annotations.SecondarytableHibernateAction;
+import org.eclipse.emf.teneo.test.emf.annotations.SetNMAction;
+import org.eclipse.emf.teneo.test.emf.annotations.SetResourceAction;
+import org.eclipse.emf.teneo.test.emf.annotations.ToOneAction;
+import org.eclipse.emf.teneo.test.emf.annotations.TransientAction;
+import org.eclipse.emf.teneo.test.emf.annotations.UniqueConstraintsAction;
+import org.eclipse.emf.teneo.test.emf.annotations.VariousAction;
+
+/**
+ * All tests
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ * @version $Revision: 1.109 $
+ */
+public class AllTests {
+
+ public static Test suite() {
+ TestSuite suite = new MultiCfgTestSuite(
+ "Test for org.eclipse.emf.teneo.hibernate.test.emf.jpa2",
+ HibernateTestbed.instance().getConfigurations());
+ suite.addTestSuite(OrphanRemovalAction.class);
+ return suite;
+ }
+}
diff --git a/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/OrphanRemovalAction.java b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/OrphanRemovalAction.java
new file mode 100755
index 000000000..2032bb5b8
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.hibernate.test/src/org/eclipse/emf/teneo/hibernate/test/emf/jpa2/OrphanRemovalAction.java
@@ -0,0 +1,117 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2005, 2006, 2007, 2008 Springsite BV (The Netherlands) and others
+ * 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:
+ * Martin Taal
+ * </copyright>
+ *
+ * $Id: AnyAction.java,v 1.2 2009/06/30 05:30:52 mtaal Exp $
+ */
+
+package org.eclipse.emf.teneo.hibernate.test.emf.jpa2;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+import org.eclipse.emf.teneo.samples.emf.annotations.any.AnyFactory;
+import org.eclipse.emf.teneo.samples.emf.annotations.any.AnyObject;
+import org.eclipse.emf.teneo.samples.emf.annotations.any.AnyPackage;
+import org.eclipse.emf.teneo.samples.emf.annotations.any.GlobalObjectType;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalFactory;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage;
+import org.eclipse.emf.teneo.test.AbstractTestAction;
+import org.eclipse.emf.teneo.test.stores.TestStore;
+
+/**
+ * Tests new orhanremoval annotation for jpa2.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ * @version $Revision: 1.2 $
+ */
+public class OrphanRemovalAction extends AbstractTestAction {
+ private final OrphanremovalFactory factory = OrphanremovalFactory.eINSTANCE;
+
+ public OrphanRemovalAction() {
+ super(OrphanremovalPackage.eINSTANCE);
+ }
+
+ @Override
+ public void doAction(TestStore store) {
+ final String name1 = "name1";
+ final String name2 = "name2";
+ store.beginTransaction();
+ {
+ final Employee employee = factory.createEmployee();
+ final EmployeeInfo info = factory.createEmployeeInfo();
+ employee.setEmployeeInfo(info);
+ info.setName(name1);
+ for (int i = 0; i < 4; i++) {
+ final Address address = factory.createAddress();
+ address.setName(i + "");
+ employee.getAddresses().add(address);
+ }
+ store.store(employee);
+ }
+ store.commitTransaction();
+
+ store.checkNumber(Employee.class, 1);
+ store.checkNumber(EmployeeInfo.class, 1);
+ store.checkNumber(Address.class, 4);
+
+ store.beginTransaction();
+ {
+ final Employee employee = store.getObject(Employee.class);
+
+ final EmployeeInfo info = factory.createEmployeeInfo();
+ info.setName(name2);
+
+ // https://hibernate.onjira.com/browse/HHH-5559
+ // https://hibernate.onjira.com/browse/HHH-6484
+ // first do this:
+ employee.setEmployeeInfo(null);
+ store.flush();
+ // before doing this:
+ employee.setEmployeeInfo(info);
+
+ employee.getAddresses().remove(1);
+
+ store.flush();
+ }
+ store.commitTransaction();
+
+ // only 3 remaining
+ store.checkNumber(Address.class, 3);
+
+ // still one
+ store.checkNumber(EmployeeInfo.class, 1);
+
+ store.beginTransaction();
+ {
+ final EmployeeInfo info = store.getObject(EmployeeInfo.class);
+ assertEquals(name2, info.getName());
+ }
+ store.commitTransaction();
+
+ // delete the parent, everything should be gone now...
+ store.beginTransaction();
+ {
+ final Employee employee = store.getObject(Employee.class);
+ store.deleteObject(employee);
+ }
+ store.commitTransaction();
+
+ store.checkNumber(Employee.class, 0);
+ store.checkNumber(Address.class, 0);
+ store.checkNumber(EmployeeInfo.class, 0);
+
+ }
+} \ No newline at end of file
diff --git a/tests/org.eclipse.emf.teneo.samples/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.teneo.samples/META-INF/MANIFEST.MF
index aa08350f0..3c70ce76d 100755
--- a/tests/org.eclipse.emf.teneo.samples/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.teneo.samples/META-INF/MANIFEST.MF
@@ -757,6 +757,9 @@ Export-Package: com.example.car;uses:="org.eclipse.emf.common.util,org.eclipse.e
org.eclipse.emf.ecore,
org.eclipse.emf.ecore.resource",
org.eclipse.emf.teneo.samples.emf.elist.featuremap.validation;uses:="org.eclipse.emf.common.util,org.eclipse.emf.teneo.samples.emf.elist.featuremap,org.eclipse.emf.ecore.util",
+ org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval,
+ org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl,
+ org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.util,
org.eclipse.emf.teneo.samples.emf.relation.relation1to1;uses:="org.eclipse.emf.ecore",
org.eclipse.emf.teneo.samples.emf.relation.relation1to1.impl;
uses:="org.eclipse.emf.ecore.impl,
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Address.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Address.java
new file mode 100644
index 000000000..480597527
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Address.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Address</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getAddress()
+ * @model
+ * @generated
+ */
+public interface Address extends EObject {
+
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getAddress_Name()
+ * @model
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+} // Address
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Employee.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Employee.java
new file mode 100644
index 000000000..4c4102829
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/Employee.java
@@ -0,0 +1,103 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Employee</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo <em>Employee Info</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getAddresses <em>Addresses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployee()
+ * @model
+ * @generated
+ */
+public interface Employee extends EObject {
+ /**
+ * Returns the value of the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Id</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Id</em>' attribute.
+ * @see #setId(long)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployee_Id()
+ * @model annotation="teneo.jpa value='@Id'"
+ * @generated
+ */
+ long getId();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getId <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Id</em>' attribute.
+ * @see #getId()
+ * @generated
+ */
+ void setId(long value);
+
+ /**
+ * Returns the value of the '<em><b>Employee Info</b></em>' reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee <em>Employee</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Employee Info</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Employee Info</em>' reference.
+ * @see #setEmployeeInfo(EmployeeInfo)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployee_EmployeeInfo()
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee
+ * @model opposite="employee"
+ * annotation="teneo.jpa value='@OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)'"
+ * @generated
+ */
+ EmployeeInfo getEmployeeInfo();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo <em>Employee Info</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Employee Info</em>' reference.
+ * @see #getEmployeeInfo()
+ * @generated
+ */
+ void setEmployeeInfo(EmployeeInfo value);
+
+ /**
+ * Returns the value of the '<em><b>Addresses</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Addresses</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Addresses</em>' reference list.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployee_Addresses()
+ * @model annotation="teneo.jpa value='@OneToMany(orphanRemoval=true)'"
+ * @generated
+ */
+ EList<Address> getAddresses();
+
+} // Employee
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/EmployeeInfo.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/EmployeeInfo.java
new file mode 100644
index 000000000..70bd2c645
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/EmployeeInfo.java
@@ -0,0 +1,110 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Employee Info</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee <em>Employee</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployeeInfo()
+ * @model
+ * @generated
+ */
+public interface EmployeeInfo extends EObject {
+ /**
+ * Returns the value of the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Id</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Id</em>' attribute.
+ * @see #setId(long)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployeeInfo_Id()
+ * @model annotation="teneo.jpa value='@Id\n@GeneratedValue'"
+ * @generated
+ */
+ long getId();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getId <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Id</em>' attribute.
+ * @see #getId()
+ * @generated
+ */
+ void setId(long value);
+
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployeeInfo_Name()
+ * @model
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Employee</b></em>' reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo <em>Employee Info</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Employee</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Employee</em>' reference.
+ * @see #setEmployee(Employee)
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#getEmployeeInfo_Employee()
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo
+ * @model opposite="employeeInfo"
+ * @generated
+ */
+ Employee getEmployee();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee <em>Employee</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Employee</em>' reference.
+ * @see #getEmployee()
+ * @generated
+ */
+ void setEmployee(Employee value);
+
+} // EmployeeInfo
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalFactory.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalFactory.java
new file mode 100644
index 000000000..6b4917421
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalFactory.java
@@ -0,0 +1,64 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage
+ * @generated
+ */
+public interface OrphanremovalFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ OrphanremovalFactory eINSTANCE = org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Employee</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Employee</em>'.
+ * @generated
+ */
+ Employee createEmployee();
+
+ /**
+ * Returns a new object of class '<em>Employee Info</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Employee Info</em>'.
+ * @generated
+ */
+ EmployeeInfo createEmployeeInfo();
+
+ /**
+ * Returns a new object of class '<em>Address</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Address</em>'.
+ * @generated
+ */
+ Address createAddress();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ OrphanremovalPackage getOrphanremovalPackage();
+
+} //OrphanremovalFactory
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalPackage.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalPackage.java
new file mode 100644
index 000000000..b790cf39c
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/OrphanremovalPackage.java
@@ -0,0 +1,400 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface OrphanremovalPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "orphanremoval";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "orphanremoval";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ OrphanremovalPackage eINSTANCE = org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl <em>Employee</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getEmployee()
+ * @generated
+ */
+ int EMPLOYEE = 0;
+
+ /**
+ * The feature id for the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE__ID = 0;
+
+ /**
+ * The feature id for the '<em><b>Employee Info</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE__EMPLOYEE_INFO = 1;
+
+ /**
+ * The feature id for the '<em><b>Addresses</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE__ADDRESSES = 2;
+
+ /**
+ * The number of structural features of the '<em>Employee</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE_FEATURE_COUNT = 3;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl <em>Employee Info</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getEmployeeInfo()
+ * @generated
+ */
+ int EMPLOYEE_INFO = 1;
+
+ /**
+ * The feature id for the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE_INFO__ID = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE_INFO__NAME = 1;
+
+ /**
+ * The feature id for the '<em><b>Employee</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE_INFO__EMPLOYEE = 2;
+
+ /**
+ * The number of structural features of the '<em>Employee Info</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMPLOYEE_INFO_FEATURE_COUNT = 3;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl <em>Address</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getAddress()
+ * @generated
+ */
+ int ADDRESS = 2;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADDRESS__NAME = 0;
+
+ /**
+ * The number of structural features of the '<em>Address</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADDRESS_FEATURE_COUNT = 1;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee <em>Employee</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Employee</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee
+ * @generated
+ */
+ EClass getEmployee();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getId <em>Id</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Id</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getId()
+ * @see #getEmployee()
+ * @generated
+ */
+ EAttribute getEmployee_Id();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo <em>Employee Info</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Employee Info</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getEmployeeInfo()
+ * @see #getEmployee()
+ * @generated
+ */
+ EReference getEmployee_EmployeeInfo();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getAddresses <em>Addresses</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Addresses</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee#getAddresses()
+ * @see #getEmployee()
+ * @generated
+ */
+ EReference getEmployee_Addresses();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo <em>Employee Info</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Employee Info</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo
+ * @generated
+ */
+ EClass getEmployeeInfo();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getId <em>Id</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Id</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getId()
+ * @see #getEmployeeInfo()
+ * @generated
+ */
+ EAttribute getEmployeeInfo_Id();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getName()
+ * @see #getEmployeeInfo()
+ * @generated
+ */
+ EAttribute getEmployeeInfo_Name();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee <em>Employee</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Employee</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo#getEmployee()
+ * @see #getEmployeeInfo()
+ * @generated
+ */
+ EReference getEmployeeInfo_Employee();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address <em>Address</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Address</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address
+ * @generated
+ */
+ EClass getAddress();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address#getName()
+ * @see #getAddress()
+ * @generated
+ */
+ EAttribute getAddress_Name();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ OrphanremovalFactory getOrphanremovalFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl <em>Employee</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getEmployee()
+ * @generated
+ */
+ EClass EMPLOYEE = eINSTANCE.getEmployee();
+
+ /**
+ * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMPLOYEE__ID = eINSTANCE.getEmployee_Id();
+
+ /**
+ * The meta object literal for the '<em><b>Employee Info</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMPLOYEE__EMPLOYEE_INFO = eINSTANCE.getEmployee_EmployeeInfo();
+
+ /**
+ * The meta object literal for the '<em><b>Addresses</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMPLOYEE__ADDRESSES = eINSTANCE.getEmployee_Addresses();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl <em>Employee Info</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getEmployeeInfo()
+ * @generated
+ */
+ EClass EMPLOYEE_INFO = eINSTANCE.getEmployeeInfo();
+
+ /**
+ * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMPLOYEE_INFO__ID = eINSTANCE.getEmployeeInfo_Id();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMPLOYEE_INFO__NAME = eINSTANCE.getEmployeeInfo_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Employee</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMPLOYEE_INFO__EMPLOYEE = eINSTANCE.getEmployeeInfo_Employee();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl <em>Address</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.OrphanremovalPackageImpl#getAddress()
+ * @generated
+ */
+ EClass ADDRESS = eINSTANCE.getAddress();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADDRESS__NAME = eINSTANCE.getAddress_Name();
+
+ }
+
+} //OrphanremovalPackage
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/AddressImpl.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/AddressImpl.java
new file mode 100644
index 000000000..03362724b
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/AddressImpl.java
@@ -0,0 +1,165 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Address</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.AddressImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AddressImpl extends EObjectImpl implements Address {
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AddressImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return OrphanremovalPackage.Literals.ADDRESS;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.ADDRESS__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case OrphanremovalPackage.ADDRESS__NAME:
+ return getName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case OrphanremovalPackage.ADDRESS__NAME:
+ setName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.ADDRESS__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.ADDRESS__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AddressImpl
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeImpl.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeImpl.java
new file mode 100644
index 000000000..e2bb01728
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeImpl.java
@@ -0,0 +1,324 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Employee</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl#getEmployeeInfo <em>Employee Info</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeImpl#getAddresses <em>Addresses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EmployeeImpl extends EObjectImpl implements Employee {
+ /**
+ * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected static final long ID_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected long id = ID_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getEmployeeInfo() <em>Employee Info</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployeeInfo()
+ * @generated
+ * @ordered
+ */
+ protected EmployeeInfo employeeInfo;
+
+ /**
+ * The cached value of the '{@link #getAddresses() <em>Addresses</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAddresses()
+ * @generated
+ * @ordered
+ */
+ protected EList<Address> addresses;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EmployeeImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return OrphanremovalPackage.Literals.EMPLOYEE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public long getId() {
+ return id;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setId(long newId) {
+ long oldId = id;
+ id = newId;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE__ID, oldId, id));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EmployeeInfo getEmployeeInfo() {
+ if (employeeInfo != null && employeeInfo.eIsProxy()) {
+ InternalEObject oldEmployeeInfo = (InternalEObject)employeeInfo;
+ employeeInfo = (EmployeeInfo)eResolveProxy(oldEmployeeInfo);
+ if (employeeInfo != oldEmployeeInfo) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, oldEmployeeInfo, employeeInfo));
+ }
+ }
+ return employeeInfo;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EmployeeInfo basicGetEmployeeInfo() {
+ return employeeInfo;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetEmployeeInfo(EmployeeInfo newEmployeeInfo, NotificationChain msgs) {
+ EmployeeInfo oldEmployeeInfo = employeeInfo;
+ employeeInfo = newEmployeeInfo;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, oldEmployeeInfo, newEmployeeInfo);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setEmployeeInfo(EmployeeInfo newEmployeeInfo) {
+ if (newEmployeeInfo != employeeInfo) {
+ NotificationChain msgs = null;
+ if (employeeInfo != null)
+ msgs = ((InternalEObject)employeeInfo).eInverseRemove(this, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, EmployeeInfo.class, msgs);
+ if (newEmployeeInfo != null)
+ msgs = ((InternalEObject)newEmployeeInfo).eInverseAdd(this, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, EmployeeInfo.class, msgs);
+ msgs = basicSetEmployeeInfo(newEmployeeInfo, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, newEmployeeInfo, newEmployeeInfo));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<Address> getAddresses() {
+ if (addresses == null) {
+ addresses = new EObjectResolvingEList<Address>(Address.class, this, OrphanremovalPackage.EMPLOYEE__ADDRESSES);
+ }
+ return addresses;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ if (employeeInfo != null)
+ msgs = ((InternalEObject)employeeInfo).eInverseRemove(this, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, EmployeeInfo.class, msgs);
+ return basicSetEmployeeInfo((EmployeeInfo)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ return basicSetEmployeeInfo(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__ID:
+ return getId();
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ if (resolve) return getEmployeeInfo();
+ return basicGetEmployeeInfo();
+ case OrphanremovalPackage.EMPLOYEE__ADDRESSES:
+ return getAddresses();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__ID:
+ setId((Long)newValue);
+ return;
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ setEmployeeInfo((EmployeeInfo)newValue);
+ return;
+ case OrphanremovalPackage.EMPLOYEE__ADDRESSES:
+ getAddresses().clear();
+ getAddresses().addAll((Collection<? extends Address>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__ID:
+ setId(ID_EDEFAULT);
+ return;
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ setEmployeeInfo((EmployeeInfo)null);
+ return;
+ case OrphanremovalPackage.EMPLOYEE__ADDRESSES:
+ getAddresses().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE__ID:
+ return id != ID_EDEFAULT;
+ case OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO:
+ return employeeInfo != null;
+ case OrphanremovalPackage.EMPLOYEE__ADDRESSES:
+ return addresses != null && !addresses.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (id: ");
+ result.append(id);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EmployeeImpl
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeInfoImpl.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeInfoImpl.java
new file mode 100644
index 000000000..8229123d3
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/EmployeeInfoImpl.java
@@ -0,0 +1,336 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Employee Info</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl.EmployeeInfoImpl#getEmployee <em>Employee</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EmployeeInfoImpl extends EObjectImpl implements EmployeeInfo {
+ /**
+ * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected static final long ID_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected long id = ID_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getEmployee() <em>Employee</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployee()
+ * @generated
+ * @ordered
+ */
+ protected Employee employee;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EmployeeInfoImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return OrphanremovalPackage.Literals.EMPLOYEE_INFO;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public long getId() {
+ return id;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setId(long newId) {
+ long oldId = id;
+ id = newId;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE_INFO__ID, oldId, id));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE_INFO__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Employee getEmployee() {
+ if (employee != null && employee.eIsProxy()) {
+ InternalEObject oldEmployee = (InternalEObject)employee;
+ employee = (Employee)eResolveProxy(oldEmployee);
+ if (employee != oldEmployee) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, oldEmployee, employee));
+ }
+ }
+ return employee;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Employee basicGetEmployee() {
+ return employee;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetEmployee(Employee newEmployee, NotificationChain msgs) {
+ Employee oldEmployee = employee;
+ employee = newEmployee;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, oldEmployee, newEmployee);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setEmployee(Employee newEmployee) {
+ if (newEmployee != employee) {
+ NotificationChain msgs = null;
+ if (employee != null)
+ msgs = ((InternalEObject)employee).eInverseRemove(this, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, Employee.class, msgs);
+ if (newEmployee != null)
+ msgs = ((InternalEObject)newEmployee).eInverseAdd(this, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, Employee.class, msgs);
+ msgs = basicSetEmployee(newEmployee, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE, newEmployee, newEmployee));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ if (employee != null)
+ msgs = ((InternalEObject)employee).eInverseRemove(this, OrphanremovalPackage.EMPLOYEE__EMPLOYEE_INFO, Employee.class, msgs);
+ return basicSetEmployee((Employee)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ return basicSetEmployee(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__ID:
+ return getId();
+ case OrphanremovalPackage.EMPLOYEE_INFO__NAME:
+ return getName();
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ if (resolve) return getEmployee();
+ return basicGetEmployee();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__ID:
+ setId((Long)newValue);
+ return;
+ case OrphanremovalPackage.EMPLOYEE_INFO__NAME:
+ setName((String)newValue);
+ return;
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ setEmployee((Employee)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__ID:
+ setId(ID_EDEFAULT);
+ return;
+ case OrphanremovalPackage.EMPLOYEE_INFO__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ setEmployee((Employee)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case OrphanremovalPackage.EMPLOYEE_INFO__ID:
+ return id != ID_EDEFAULT;
+ case OrphanremovalPackage.EMPLOYEE_INFO__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case OrphanremovalPackage.EMPLOYEE_INFO__EMPLOYEE:
+ return employee != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (id: ");
+ result.append(id);
+ result.append(", name: ");
+ result.append(name);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EmployeeInfoImpl
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalFactoryImpl.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalFactoryImpl.java
new file mode 100644
index 000000000..aed4a4f5f
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalFactoryImpl.java
@@ -0,0 +1,121 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OrphanremovalFactoryImpl extends EFactoryImpl implements OrphanremovalFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static OrphanremovalFactory init() {
+ try {
+ OrphanremovalFactory theOrphanremovalFactory = (OrphanremovalFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval");
+ if (theOrphanremovalFactory != null) {
+ return theOrphanremovalFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new OrphanremovalFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OrphanremovalFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case OrphanremovalPackage.EMPLOYEE: return createEmployee();
+ case OrphanremovalPackage.EMPLOYEE_INFO: return createEmployeeInfo();
+ case OrphanremovalPackage.ADDRESS: return createAddress();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Employee createEmployee() {
+ EmployeeImpl employee = new EmployeeImpl();
+ return employee;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EmployeeInfo createEmployeeInfo() {
+ EmployeeInfoImpl employeeInfo = new EmployeeInfoImpl();
+ return employeeInfo;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Address createAddress() {
+ AddressImpl address = new AddressImpl();
+ return address;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OrphanremovalPackage getOrphanremovalPackage() {
+ return (OrphanremovalPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static OrphanremovalPackage getPackage() {
+ return OrphanremovalPackage.eINSTANCE;
+ }
+
+} //OrphanremovalFactoryImpl
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalPackageImpl.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalPackageImpl.java
new file mode 100644
index 000000000..f9b50fc2d
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/impl/OrphanremovalPackageImpl.java
@@ -0,0 +1,328 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalFactory;
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OrphanremovalPackageImpl extends EPackageImpl implements OrphanremovalPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass employeeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass employeeInfoEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass addressEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private OrphanremovalPackageImpl() {
+ super(eNS_URI, OrphanremovalFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link OrphanremovalPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static OrphanremovalPackage init() {
+ if (isInited) return (OrphanremovalPackage)EPackage.Registry.INSTANCE.getEPackage(OrphanremovalPackage.eNS_URI);
+
+ // Obtain or create and register package
+ OrphanremovalPackageImpl theOrphanremovalPackage = (OrphanremovalPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof OrphanremovalPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new OrphanremovalPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theOrphanremovalPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theOrphanremovalPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theOrphanremovalPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(OrphanremovalPackage.eNS_URI, theOrphanremovalPackage);
+ return theOrphanremovalPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEmployee() {
+ return employeeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEmployee_Id() {
+ return (EAttribute)employeeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEmployee_EmployeeInfo() {
+ return (EReference)employeeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEmployee_Addresses() {
+ return (EReference)employeeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEmployeeInfo() {
+ return employeeInfoEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEmployeeInfo_Id() {
+ return (EAttribute)employeeInfoEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEmployeeInfo_Name() {
+ return (EAttribute)employeeInfoEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEmployeeInfo_Employee() {
+ return (EReference)employeeInfoEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAddress() {
+ return addressEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAddress_Name() {
+ return (EAttribute)addressEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OrphanremovalFactory getOrphanremovalFactory() {
+ return (OrphanremovalFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ employeeEClass = createEClass(EMPLOYEE);
+ createEAttribute(employeeEClass, EMPLOYEE__ID);
+ createEReference(employeeEClass, EMPLOYEE__EMPLOYEE_INFO);
+ createEReference(employeeEClass, EMPLOYEE__ADDRESSES);
+
+ employeeInfoEClass = createEClass(EMPLOYEE_INFO);
+ createEAttribute(employeeInfoEClass, EMPLOYEE_INFO__ID);
+ createEAttribute(employeeInfoEClass, EMPLOYEE_INFO__NAME);
+ createEReference(employeeInfoEClass, EMPLOYEE_INFO__EMPLOYEE);
+
+ addressEClass = createEClass(ADDRESS);
+ createEAttribute(addressEClass, ADDRESS__NAME);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(employeeEClass, Employee.class, "Employee", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEmployee_Id(), ecorePackage.getELong(), "id", null, 0, 1, Employee.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEmployee_EmployeeInfo(), this.getEmployeeInfo(), this.getEmployeeInfo_Employee(), "employeeInfo", null, 0, 1, Employee.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEmployee_Addresses(), this.getAddress(), null, "addresses", null, 0, -1, Employee.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(employeeInfoEClass, EmployeeInfo.class, "EmployeeInfo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEmployeeInfo_Id(), ecorePackage.getELong(), "id", null, 0, 1, EmployeeInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEmployeeInfo_Name(), ecorePackage.getEString(), "name", null, 0, 1, EmployeeInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEmployeeInfo_Employee(), this.getEmployee(), this.getEmployee_EmployeeInfo(), "employee", null, 0, 1, EmployeeInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(addressEClass, Address.class, "Address", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getAddress_Name(), ecorePackage.getEString(), "name", null, 0, 1, Address.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // teneo.jpa
+ createTeneoAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>teneo.jpa</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createTeneoAnnotations() {
+ String source = "teneo.jpa";
+ addAnnotation
+ (getEmployee_Id(),
+ source,
+ new String[] {
+ "value", "@Id"
+ });
+ addAnnotation
+ (getEmployee_EmployeeInfo(),
+ source,
+ new String[] {
+ "value", "@OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)"
+ });
+ addAnnotation
+ (getEmployee_Addresses(),
+ source,
+ new String[] {
+ "value", "@OneToMany(orphanRemoval=true)"
+ });
+ addAnnotation
+ (getEmployeeInfo_Id(),
+ source,
+ new String[] {
+ "value", "@Id\n@GeneratedValue"
+ });
+ }
+
+} //OrphanremovalPackageImpl
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.ecore b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.ecore
new file mode 100755
index 000000000..2732b8d4a
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.ecore
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="orphanremoval"
+ nsURI="http://www.eclipse.org/emf/teneo/samples/emf/jpa2/orphanremoval" nsPrefix="orphanremoval">
+ <eClassifiers xsi:type="ecore:EClass" name="Employee">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
+ <eAnnotations source="teneo.jpa">
+ <details key="value" value="@Id"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="employeeInfo" eType="#//EmployeeInfo"
+ eOpposite="#//EmployeeInfo/employee">
+ <eAnnotations source="teneo.jpa">
+ <details key="value" value="@OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="addresses" upperBound="-1"
+ eType="#//Address">
+ <eAnnotations source="teneo.jpa">
+ <details key="value" value="@OneToMany(orphanRemoval=true)"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EmployeeInfo">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
+ <eAnnotations source="teneo.jpa">
+ <details key="value" value="@Id&#xA;@GeneratedValue"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="employee" eType="#//Employee"
+ eOpposite="#//Employee/employeeInfo"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Address">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.genmodel b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.genmodel
new file mode 100644
index 000000000..19088db90
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/model/orphanremoval.genmodel
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.emf.teneo.samples/src"
+ modelPluginID="org.eclipse.emf.teneo.samples" modelName="Orphanremoval" importerID="org.eclipse.emf.importer.ecore"
+ complianceLevel="5.0" copyrightFields="false">
+ <foreignModel>orphanremoval.ecore</foreignModel>
+ <genPackages prefix="Orphanremoval" basePackage="org.eclipse.emf.teneo.samples.emf.jpa2"
+ disposableProviderFactory="true" ecorePackage="orphanremoval.ecore#/">
+ <genClasses ecoreClass="orphanremoval.ecore#//Employee">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orphanremoval.ecore#//Employee/id"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference orphanremoval.ecore#//Employee/employeeInfo"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference orphanremoval.ecore#//Employee/addresses"/>
+ </genClasses>
+ <genClasses ecoreClass="orphanremoval.ecore#//EmployeeInfo">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orphanremoval.ecore#//EmployeeInfo/id"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orphanremoval.ecore#//EmployeeInfo/name"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference orphanremoval.ecore#//EmployeeInfo/employee"/>
+ </genClasses>
+ <genClasses ecoreClass="orphanremoval.ecore#//Address">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute orphanremoval.ecore#//Address/name"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalAdapterFactory.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalAdapterFactory.java
new file mode 100644
index 000000000..da8a0de15
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalAdapterFactory.java
@@ -0,0 +1,160 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage
+ * @generated
+ */
+public class OrphanremovalAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static OrphanremovalPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OrphanremovalAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = OrphanremovalPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected OrphanremovalSwitch<Adapter> modelSwitch =
+ new OrphanremovalSwitch<Adapter>() {
+ @Override
+ public Adapter caseEmployee(Employee object) {
+ return createEmployeeAdapter();
+ }
+ @Override
+ public Adapter caseEmployeeInfo(EmployeeInfo object) {
+ return createEmployeeInfoAdapter();
+ }
+ @Override
+ public Adapter caseAddress(Address object) {
+ return createAddressAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee <em>Employee</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Employee
+ * @generated
+ */
+ public Adapter createEmployeeAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo <em>Employee Info</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.EmployeeInfo
+ * @generated
+ */
+ public Adapter createEmployeeInfoAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address <em>Address</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.Address
+ * @generated
+ */
+ public Adapter createAddressAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //OrphanremovalAdapterFactory
diff --git a/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalSwitch.java b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalSwitch.java
new file mode 100644
index 000000000..09724ced1
--- /dev/null
+++ b/tests/org.eclipse.emf.teneo.samples/src/org/eclipse/emf/teneo/samples/emf/jpa2/orphanremoval/util/OrphanremovalSwitch.java
@@ -0,0 +1,156 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.teneo.samples.emf.jpa2.orphanremoval.OrphanremovalPackage
+ * @generated
+ */
+public class OrphanremovalSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static OrphanremovalPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OrphanremovalSwitch() {
+ if (modelPackage == null) {
+ modelPackage = OrphanremovalPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case OrphanremovalPackage.EMPLOYEE: {
+ Employee employee = (Employee)theEObject;
+ T result = caseEmployee(employee);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case OrphanremovalPackage.EMPLOYEE_INFO: {
+ EmployeeInfo employeeInfo = (EmployeeInfo)theEObject;
+ T result = caseEmployeeInfo(employeeInfo);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case OrphanremovalPackage.ADDRESS: {
+ Address address = (Address)theEObject;
+ T result = caseAddress(address);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Employee</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Employee</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEmployee(Employee object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Employee Info</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Employee Info</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEmployeeInfo(EmployeeInfo object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Address</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Address</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAddress(Address object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //OrphanremovalSwitch

Back to the top