Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2009-03-19 17:20:14 +0000
committerMartin Taal2009-03-19 17:20:14 +0000
commitc2054ccab9b3c36ed76e02f8184dffe5eca1aabf (patch)
treeab756946f8f1d7b5846b2605f56db670b8e6e561 /plugins/org.eclipse.emf.cdo.server.hibernate
parentc7791a37c2b42af8a2c5583e77c1d900da0ffd87 (diff)
downloadcdo-c2054ccab9b3c36ed76e02f8184dffe5eca1aabf.tar.gz
cdo-c2054ccab9b3c36ed76e02f8184dffe5eca1aabf.tar.xz
cdo-c2054ccab9b3c36ed76e02f8184dffe5eca1aabf.zip
Solved some issues with the Hibernate Store
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.hibernate')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/log4j.properties4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java67
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameGetter.java42
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameSetter.java43
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java87
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java190
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java9
9 files changed, 449 insertions, 22 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
index 257dac4f16..a9c83a06ee 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
@@ -14,7 +14,7 @@
<property name="timeStamp" access="field" />
<array name="packageInfos" cascade="all, delete-orphan" access="field" inverse="true">
- <key />
+ <key column="cdo_package_unit_id"/>
<list-index />
<one-to-many class="CDOPackageInfoImpl"/>
</array>
@@ -27,7 +27,7 @@
<generator class="increment" />
</id>
- <many-to-one name="packageUnit" entity-name="CDOPackageUnit" not-null="false" access="field"/>
+ <many-to-one name="packageUnit" entity-name="CDOPackageUnit" not-null="true" column="cdo_package_unit_id" access="field"/>
<property name="packageURI" not-null="true" length="255" access="field" />
<property name="parentURI" length="255" access="field" />
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/log4j.properties b/plugins/org.eclipse.emf.cdo.server.hibernate/src/log4j.properties
index b956a8a902..b2157a5ddb 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/log4j.properties
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/log4j.properties
@@ -18,10 +18,10 @@ log4j.logger.org.hibernate=error
log4j.logger.org.hibernate.hql.ast.AST=error
### log just the SQL
-log4j.logger.org.hibernate.SQL=error
+log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
-log4j.logger.org.hibernate.type=error
+log4j.logger.org.hibernate.type=debug
#log4j.logger.org.hibernate.type=error
### log schema export/update ###
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
index 058536cf2f..78646b65dc 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
@@ -12,7 +12,6 @@
package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.common.model.EMFUtil;
-import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
@@ -79,21 +78,6 @@ public class HibernatePackageHandler extends Lifecycle
public List<EPackage> getEPackages()
{
List<EPackage> ePackages = new ArrayList<EPackage>();
- if (HibernateThreadContext.isHibernateCommitContextSet())
- {
- IStoreAccessor.CommitContext cc = HibernateThreadContext.getHibernateCommitContext().getCommitContext();
- if (cc != null)
- {
- for (InternalCDOPackageUnit packageUnit : cc.getNewPackageUnits())
- {
- for (EPackage ePackage : packageUnit.getEPackages(true))
- {
- ePackages.add(ePackage);
- }
- }
- }
- }
-
for (EPackage ePackage : getPackageRegistry().getEPackages())
{
ePackages.add(ePackage);
@@ -124,7 +108,7 @@ public class HibernatePackageHandler extends Lifecycle
// first store and update the new packageunits and the epackages
for (InternalCDOPackageUnit packageUnit : packageUnits)
{
- session.saveOrUpdate("CDOPackageUnit", packageUnit);
+ session.save("CDOPackageUnit", packageUnit);
if (packageUnit.getPackageInfos().length > 0)
{
@@ -134,7 +118,7 @@ public class HibernatePackageHandler extends Lifecycle
final EPackage.Registry registry = hibernateStore.getRepository().getPackageRegistry();
final EPackage rootEPackage = registry.getEPackage(rootNSUri);
hbEPackage.setEPackageBlob(EMFUtil.getEPackageBytes(rootEPackage, true, registry));
- session.saveOrUpdate(packageUnit);
+ session.saveOrUpdate(hbEPackage);
}
updated = true;
@@ -143,6 +127,11 @@ public class HibernatePackageHandler extends Lifecycle
tx.commit();
err = false;
}
+ catch (Exception e)
+ {
+ e.printStackTrace(System.err);
+ throw new Error(e);
+ }
finally
{
if (err)
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
index a00b25299e..3e89ec06f6 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
@@ -25,6 +25,15 @@ import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.net4j.util.ObjectUtil;
import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
@@ -44,6 +53,8 @@ public class HibernateUtil
private static HibernateUtil instance = new HibernateUtil();
+ private static String SEPARATOR = "_;_";
+
/**
* @return the instance
*/
@@ -266,4 +277,60 @@ public class HibernateUtil
final Session session = getHibernateSession();
return (InternalCDORevision)session.get(cdoIDHibernate.getEntityName(), cdoIDHibernate.getId());
}
+
+ public int convertStringToFeatureID(EObject contained, String value)
+ {
+ final String[] values = value.split(SEPARATOR);
+ final String nsuri = values[0];
+ final EPackage eContainerPackage = EPackage.Registry.INSTANCE.getEPackage(nsuri);
+ final String eContainerEClassName = values[1];
+ final EClass eContainingClass = (EClass)eContainerPackage.getEClassifier(eContainerEClassName);
+
+ final EPackage eFeaturePackage = EPackage.Registry.INSTANCE.getEPackage(values[2]);
+
+ final String eClassifierName = values[3];
+ final EClassifier eClassifier = eFeaturePackage.getEClassifier(eClassifierName);
+ final EClass eFeatureClass = (EClass)eClassifier;
+ final String eFeatureName = values[4];
+ final EStructuralFeature eFeature = eFeatureClass.getEStructuralFeature(eFeatureName);
+ return getContainerFeatureId(eContainingClass, contained, eFeature);
+ }
+
+ private int getContainerFeatureId(EClass containingEClass, EObject contained, EStructuralFeature eFeature)
+ {
+ if (eFeature instanceof EAttribute)
+ {
+ return InternalEObject.EOPPOSITE_FEATURE_BASE - containingEClass.getFeatureID(eFeature);
+
+ }
+ final EReference eReference = (EReference)eFeature;
+ if (eReference.getEOpposite() != null)
+ {
+ final EReference containerEReference = eReference.getEOpposite();
+ return contained.eClass().getFeatureID(containerEReference);
+ }
+ else
+ {
+ return InternalEObject.EOPPOSITE_FEATURE_BASE - containingEClass.getFeatureID(eReference);
+ }
+ }
+
+ public static String convertEContainerRelationToString(EClass eClass, EStructuralFeature eFeature)
+ {
+ StringBuilder result = new StringBuilder();
+ {
+ final String uri = eClass.getEPackage().getNsURI();
+ final String eClassifierName = eClass.getName();
+ result.append(uri + SEPARATOR + eClassifierName);
+ }
+
+ {
+ final String uri = eFeature.getEContainingClass().getEPackage().getNsURI();
+ final String eClassName = eFeature.getEContainingClass().getName();
+ final String eFeatureName = eFeature.getName();
+ result.append(SEPARATOR + uri + SEPARATOR + eClassName + SEPARATOR + eFeatureName);
+ }
+ return result.toString();
+ }
+
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameGetter.java
new file mode 100644
index 0000000000..9814885fce
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameGetter.java
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2004 - 2009 Martin Taal 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 - copied from CDORevisionPropertyHandler and adapted
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOContainingFeatureNameGetter extends CDOPropertyGetter
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOContainingFeatureNameGetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ super(tuplizer, propertyName);
+ }
+
+ @Override
+ public Object get(Object target) throws HibernateException
+ {
+ return ((InternalCDORevision)target).getContainingFeatureID();
+ }
+
+ @Override
+ protected boolean isVirtualPropertyAllowed()
+ {
+ return true;
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameSetter.java
new file mode 100644
index 0000000000..fab1170a1f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureNameSetter.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2004 - 2009 Martin Taal 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 - copied from CDORevisionPropertyHandler and adapted
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionFactoryImplementor;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOContainingFeatureNameSetter extends CDOPropertySetter
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOContainingFeatureNameSetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ super(tuplizer, propertyName);
+ }
+
+ @Override
+ public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+ {
+ final InternalCDORevision revision = (InternalCDORevision)target;
+ revision.setContainingFeatureID((Integer)value);
+ }
+
+ @Override
+ protected boolean isVirtualPropertyAllowed()
+ {
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java
new file mode 100644
index 0000000000..0a110d960c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java
@@ -0,0 +1,87 @@
+/**
+ * <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: CDOENumIntegerType.java,v 1.1 2009-03-19 17:20:14 mtaal Exp $
+ */
+
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.hibernate.HibernateException;
+
+/**
+ * Implements the EMF UserType for an Enum in a dynamic model, for an integer field.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ * @version $Revision: 1.1 $ $Date: 2009-03-19 17:20:14 $
+ */
+
+public class CDOENumIntegerType extends CDOENumStringType {
+
+ /** The sql types used for enums */
+ private static final int[] SQL_TYPES = new int[] { Types.INTEGER };
+
+ /** Hashmap with string to enum mappings */
+ private final HashMap<Integer, Enumerator> localCache = new HashMap<Integer, Enumerator>();
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[],
+ * java.lang.Object)
+ */
+ @Override
+ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+ final int value = rs.getInt(names[0]);
+ if (rs.wasNull()) {
+ return null;
+ }
+
+ Integer objValue = new Integer(value);
+ Enumerator enumValue = localCache.get(objValue);
+ if (enumValue != null) {
+ return enumValue;
+ }
+
+ enumValue = enumInstance.getEEnumLiteral(objValue.intValue());
+ localCache.put(objValue, enumValue);
+ return enumValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement,
+ * java.lang.Object, int)
+ */
+ @Override
+ public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+ if (value == null) {
+ st.setNull(index, Types.INTEGER);
+ } else {
+ st.setInt(index, ((Enumerator) value).getValue());
+ }
+ }
+
+ /** An enum is stored in one varchar */
+ @Override
+ public int[] sqlTypes() {
+ return SQL_TYPES;
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java
new file mode 100644
index 0000000000..7835cfad4d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java
@@ -0,0 +1,190 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2009 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: CDOENumStringType.java,v 1.1 2009-03-19 17:20:14 mtaal Exp $
+ */
+
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Properties;
+
+/**
+ * Implements the EMF UserType for an Enum
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ * @version $Revision: 1.1 $ $Date: 2009-03-19 17:20:14 $
+ */
+
+public class CDOENumStringType implements UserType, ParameterizedType
+{
+ /** The sql types used for enums */
+ private static final int[] SQL_TYPES = new int[] { Types.VARCHAR };
+
+ /** The enum type we are handling here */
+ protected EEnum enumInstance;
+
+ /** Hashmap with string to enum mappings */
+ private final HashMap<String, Enumerator> localCache = new HashMap<String, Enumerator>();
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object)
+ */
+ public Object assemble(Serializable cached, Object owner) throws HibernateException
+ {
+ return cached;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object)
+ */
+ public Object deepCopy(Object value) throws HibernateException
+ {
+ return value;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#disassemble(java.lang.Object)
+ */
+ public Serializable disassemble(Object value) throws HibernateException
+ {
+ return (Serializable)value;
+ }
+
+ /** Compares the int values of the enumerates */
+ public boolean equals(Object x, Object y) throws HibernateException
+ {
+ // todo: check compare on null values
+ if (x == null && y == null)
+ {
+ return true;
+ }
+
+ if (x == null || y == null)
+ {
+ return false;
+ }
+
+ if (x.getClass() != y.getClass())
+ {
+ return false;
+ }
+ return ((Enumerator)x).getValue() == ((Enumerator)y).getValue();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#hashCode(java.lang.Object)
+ */
+ public int hashCode(Object x) throws HibernateException
+ {
+ return x.hashCode();
+ }
+
+ /** Not mutable */
+ public boolean isMutable()
+ {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object)
+ */
+ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException
+ {
+ final String name = rs.getString(names[0]);
+ if (rs.wasNull())
+ {
+ return null;
+ }
+
+ Enumerator enumValue = localCache.get(name);
+ if (enumValue != null)
+ {
+ return enumValue;
+ }
+
+ enumValue = enumInstance.getEEnumLiteralByLiteral(name.trim());
+ if (enumValue == null)
+ {
+ throw new IllegalStateException("The enum value " + name + " is not valid for enumerator: "
+ + enumInstance.getName());
+ }
+ localCache.put(name, enumValue);
+ return enumValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)
+ */
+ public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException
+ {
+ if (value == null)
+ {
+ st.setNull(index, Types.VARCHAR);
+ }
+ else
+ {
+ st.setString(index, ((Enumerator)value).getName());
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.hibernate.usertype.UserType#replace(java.lang.Object, java.lang.Object, java.lang.Object)
+ */
+ public Object replace(Object original, Object target, Object owner) throws HibernateException
+ {
+ return original;
+ }
+
+ /** Returns the parameterizezd enumType */
+ public Class<?> returnedClass()
+ {
+ return enumInstance.getClass();
+ }
+
+ /** An enum is stored in one varchar */
+ public int[] sqlTypes()
+ {
+ return SQL_TYPES;
+ }
+
+ /** Sets the enumclass */
+ public void setParameterValues(Properties parameters)
+ {
+ // TODO: externalize
+ final String epackUri = parameters.getProperty("epackage");
+ final String eclassifier = parameters.getProperty("eclassifier");
+ final EPackage epack = EPackage.Registry.INSTANCE.getEPackage(epackUri);
+ enumInstance = (EEnum)epack.getEClassifier(eclassifier);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
index 9e60117880..b0772fea7a 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
@@ -217,6 +217,10 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
{
return new CDOContainingFeatureIDGetter(this, mappedProperty.getName());
}
+ else if (mappedProperty.getName().compareTo("containingFeatureName") == 0)
+ {
+ return new CDOContainingFeatureIDGetter(this, mappedProperty.getName());
+ }
EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
if (feature instanceof EReference && feature.isMany())
@@ -271,6 +275,11 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
return new CDOContainingFeatureIDSetter(this, mappedProperty.getName());
}
+ if (mappedProperty.getName().compareTo("containingFeatureName") == 0)
+ {
+ return new CDOContainingFeatureIDSetter(this, mappedProperty.getName());
+ }
+
EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
if (feature instanceof EReference && feature.isMany())
{

Back to the top