Author: adamw
Date: 2008-08-23 06:59:58 -0400 (Sat, 23 Aug 2008)
New Revision: 125
Added:
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java
Removed:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
Modified:
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java
trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
trunk/src/main/org/jboss/envers/entities/RelationType.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
Log:
ENVERS-24: support for many-to-many bidirectional relations, without generating revision
numbers
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-22
16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -31,7 +31,7 @@
public EntitiesConfigurations configure(Configuration cfg, YReflectionManager
reflectionManager,
GlobalConfiguration globalCfg,
VersionsEntitiesConfiguration verEntCfg,
Document revisionInfoXmlMapping) {
- VersionsMetadataGenerator versionsMetaGen = new
VersionsMetadataGenerator(globalCfg, verEntCfg);
+ VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(cfg,
globalCfg, verEntCfg);
DOMWriter writer = new DOMWriter();
// Sorting the persistent class topologically - superclass always before
subclass
@@ -71,10 +71,12 @@
try {
cfg.addDocument(writer.write(mappingData.getMainMapping()));
+ // TODO
//writeDocument(mappingData.getMainMapping());
for (Document additionalMapping : mappingData.getAdditionalMappings()) {
cfg.addDocument(writer.write(additionalMapping));
+ // TODO
//writeDocument(additionalMapping);
}
} catch (DocumentException e) {
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -24,6 +24,7 @@
import org.hibernate.type.*;
import org.hibernate.util.StringHelper;
import org.hibernate.MappingException;
+import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.*;
import org.hibernate.mapping.Collection;
import org.dom4j.Element;
@@ -35,10 +36,7 @@
import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
import org.jboss.envers.entities.mapper.*;
import org.jboss.envers.entities.mapper.id.*;
-import org.jboss.envers.entities.mapper.relation.ToOneIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToOneNotOwningIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyAttachedMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyDetachedMapper;
+import org.jboss.envers.entities.mapper.relation.*;
import org.jboss.envers.tools.StringTools;
import org.jboss.envers.tools.Tools;
import org.jboss.envers.tools.HibernateVersion;
@@ -58,6 +56,7 @@
public class VersionsMetadataGenerator {
private final static Map<String, ModificationStore> EMPTY_STORE =
Collections.emptyMap();
+ private final Configuration cfg;
private final GlobalConfiguration globalCfg;
private final VersionsEntitiesConfiguration verEntCfg;
@@ -68,7 +67,9 @@
private YLog log =
YLogManager.getLogManager().getLog(VersionsMetadataGenerator.class);
- public VersionsMetadataGenerator(GlobalConfiguration globalCfg,
VersionsEntitiesConfiguration verEntCfg) {
+ public VersionsMetadataGenerator(Configuration cfg, GlobalConfiguration globalCfg,
+ VersionsEntitiesConfiguration verEntCfg) {
+ this.cfg = cfg;
this.globalCfg = globalCfg;
this.verEntCfg = verEntCfg;
@@ -323,7 +324,7 @@
@SuppressWarnings({"unchecked"})
private void addOneToManyDetached(Property property, CompositeMapperBuilder mapper,
String entityName,
- EntityMappingData mappingData) {
+ EntityMappingData mappingData) {
Collection propertyValue = (Collection) property.getValue();
ManyToOne mto = (ManyToOne) propertyValue.getElement();
@@ -346,7 +347,7 @@
String referencedPrefix = property.getName() + "_";
// Name of the entity that will be used to store the relation between the two
entities.
- String middleEntityName = referencingPrefix + referencedEntityName;
+ String middleEntityName = entityName + "_" + referencedEntityName;
String versionsMiddleEntityName =
verEntCfg.getVersionsEntityName(middleEntityName);
String versionsMiddleTableName = verEntCfg.getVersionsTableName(middleEntityName,
mto.getTable().getName());
@@ -375,9 +376,7 @@
addRevisionNumber(middleEntityId);
addRevisionType(middleEntity);
- // TODO storing information about this relation
-
//entitiesConfigurations.get(entityName).addOneToManyAttachedRelation(propertyName,
owningReferencePropertyName,
- // owningEntityName, ownedIdMapper);
+
entitiesConfigurations.get(entityName).addOneToManyDetachedRelation(property.getName(),
referencedEntityName);
// Adding the property mapper
mapper.addComposite(property.getName(), new OneToManyDetachedMapper(verEntCfg,
entityName,
@@ -389,9 +388,68 @@
// TODO: ???
}
+ @SuppressWarnings({"unchecked"})
+ private String getMappedBy(Table collectionTable, PersistentClass referencedClass) {
+ Iterator<Property> properties = referencedClass.getPropertyIterator();
+ while (properties.hasNext()) {
+ Property property = properties.next();
+ if (property.getValue() instanceof Collection) {
+ // The equality is intentional. We want to find a collection property
with the same collection table.
+ //noinspection ObjectEquality
+ if (((Collection) property.getValue()).getCollectionTable() ==
collectionTable) {
+ return property.getName();
+ }
+ }
+ }
+
+ return null;
+ }
+
private void addManyToManyNotOwning(Property property, CompositeMapperBuilder mapper,
String entityName,
EntityMappingData mappingData) {
- System.out.println("XXX");
+ Collection propertyValue = (Collection) property.getValue();
+ ManyToOne mto = (ManyToOne) propertyValue.getElement();
+
+ String referencedEntityName = mto.getReferencedEntityName();
+
+ EntityConfiguration configuration = entitiesConfigurations.get(entityName);
+ if (configuration == null) {
+ throw new MappingException("A versioned relation to a non-versioned
entity " + entityName + "!");
+ }
+
+ EntityConfiguration referencedConfiguration =
entitiesConfigurations.get(referencedEntityName);
+ if (referencedConfiguration == null) {
+ throw new MappingException("A versioned relation to a non-versioned
entity " + referencedEntityName + "!");
+ }
+
+ String mappedBy = getMappedBy(propertyValue.getCollectionTable(),
cfg.getClassMapping(referencedEntityName));
+ if (mappedBy == null) {
+ throw new MappingException("Unable to read the mapped by attribute for
" + property.getName());
+ }
+
+ IdMappingData referencingIdMapping = configuration.getIdMappingData();
+ IdMappingData referencedIdMapping = referencedConfiguration.getIdMappingData();
+
+ String referencingPrefix = mappedBy + "_";
+ String referencedPrefix = StringTools.getLastComponent(referencedEntityName) +
"_";
+
+ // Name of the entity that will be used to store the relation between the two
entities.
+ // The order is inverse, as the referenced and referencing entity names are
swapped with respect to the
+ // name of the entity that was created on the owning side in
<code>addOneToManyDetached</code>.
+ String middleEntityName = referencedEntityName + "_" + entityName;
+ String versionsMiddleEntityName =
verEntCfg.getVersionsEntityName(middleEntityName);
+
+
entitiesConfigurations.get(entityName).addManyToManyNotOwningRelation(property.getName(),
mappedBy,
+ referencedEntityName);
+
+ // Adding the property mapper
+ mapper.addComposite(property.getName(), new ManyToManyNotOwningMapper(verEntCfg,
entityName,
+ referencedEntityName, property.getName(),
verEntCfg.getVersionsEntityName(referencedEntityName),
+ versionsMiddleEntityName,
referencingIdMapping.getIdMapper().prefixMappedProperties(referencingPrefix),
+
referencedIdMapping.getIdMapper().prefixMappedProperties(referencedPrefix),
+ entitiesConfigurations.get(referencedEntityName).getIdMapper()));
+
+ // TODO
}
private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo
propertyStoreInfo,
Modified: trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-22
16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -58,7 +58,8 @@
for (RelationDescription relDesc : entCfg.getRelationsIterator()) {
// If this is an "owned" relation, checking the related entity,
if it has a relation that has
// a mapped-by attribute to the currently checked. If so, this is a
bidirectional relation.
- if (relDesc.getRelationType() == RelationType.TO_ONE) {
+ if (relDesc.getRelationType() == RelationType.TO_ONE ||
+ relDesc.getRelationType() == RelationType.ONE_TO_MANY_DETACHED)
{
for (RelationDescription other :
entitiesConfigurations.get(relDesc.getToEntityName()).getRelationsIterator()) {
if
(relDesc.getFromPropertyName().equals(other.getMappedByPropertyName()) &&
(entityName.equals(other.getToEntityName()))) {
Modified: trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-22 16:24:06
UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-23 10:59:58
UTC (rev 125)
@@ -67,6 +67,17 @@
toEntityName, mappedByPropertyName, idMapper));
}
+ public void addOneToManyDetachedRelation(String fromPropertyName, String
toEntityName) {
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.ONE_TO_MANY_DETACHED,
+ toEntityName, null, null));
+ }
+
+ public void addManyToManyNotOwningRelation(String fromPropertyName, String
mappedByPropertyName,
+ String toEntityName) {
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.MANY_TO_MANY_NOT_OWNING,
+ toEntityName, mappedByPropertyName, null));
+ }
+
public boolean isRelation(String propertyName) {
return relations.get(propertyName) != null;
}
Modified: trunk/src/main/org/jboss/envers/entities/RelationType.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/RelationType.java 2008-08-22 16:24:06 UTC
(rev 124)
+++ trunk/src/main/org/jboss/envers/entities/RelationType.java 2008-08-23 10:59:58 UTC
(rev 125)
@@ -6,5 +6,7 @@
public enum RelationType {
TO_ONE,
ONE_TO_ONE,
- ONE_TO_MANY
+ ONE_TO_MANY,
+ ONE_TO_MANY_DETACHED,
+ MANY_TO_MANY_NOT_OWNING
}
Copied:
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
(from rev 124,
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java)
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
(rev 0)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -0,0 +1,59 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.lazy.DetachedRelationInitializor;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class ManyToManyNotOwningMapper extends AbstractOneToManyMapper implements
PropertyMapper {
+ /**
+ * Name of the entity that declares the relation.
+ */
+ private final String referencedEntityName;
+
+ private final DetachedRelationQueryGenerator queryGenerator;
+
+ public ManyToManyNotOwningMapper(VersionsEntitiesConfiguration verEntCfg, String
referencingEntityName,
+ String referencedEntityName, String
collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String
versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper
referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ super(referencingEntityName, collectionReferencingPropertyName);
+
+ this.referencedEntityName = referencedEntityName;
+
+ queryGenerator = new DetachedRelationQueryGenerator(verEntCfg,
versionsReferencedEntityName,
+ versionsMiddleEntityName, referencingMiddleIdMapper,
referencedMiddleIdMapper, referencedIdMapper);
+ }
+
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String
referencingPropertyName,
+ PersistentCollection
newColl,
+ Serializable
oldColl, Serializable id) {
+ // This is the not-owning side of the collection.
+ return null;
+ }
+
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj,
Object oldObj) {
+ // This is the not-owning side of the collection.
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T>
getInitializator(VersionsConfiguration verCfg,
+
VersionsReaderImplementor versionsReader,
+ Class<?>
entityClass, Object primaryKey,
+ Number revision,
Class<T> collectionClass) {
+ return new DetachedRelationInitializor<T>(verCfg, referencedEntityName,
queryGenerator,
+ versionsReader, primaryKey, revision, collectionClass);
+ }
+}
\ No newline at end of file
Property changes on:
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
___________________________________________________________________
Name: svn:mergeinfo
+
Deleted:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,64 +0,0 @@
-/*
- * Envers.
http://www.jboss.org/envers
- *
- * Copyright 2008 Red Hat Middleware, LLC. All rights reserved.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT A WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License, v.2.1 along with this distribution; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * Red Hat Author(s): Adam Warski
- */
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyBidirectionalInitializor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalMapper extends AbstractOneToManyMapper implements
PropertyMapper {
- private final String owningReferencePropertyName;
-
- public OneToManyBidirectionalMapper(String owningReferencePropertyName, String
owningEntityName, String propertyName) {
- super(owningEntityName, propertyName);
-
- this.owningReferencePropertyName = owningReferencePropertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj,
Object oldObj) {
- return false;
- }
-
- protected <T extends Collection> Initializor<T>
getInitializator(VersionsConfiguration verCfg,
-
VersionsReaderImplementor versionsReader,
- Class<?>
entityClass, Object primaryKey,
- Number revision,
- Class<T>
collectionClass) {
- return new OneToManyBidirectionalInitializor<T>(versionsReader,
entityClass, owningReferencePropertyName, primaryKey,
- revision, collectionClass);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChanges(String
referencingPropertyName, PersistentCollection newColl,
- Serializable
oldColl, Serializable id) {
- return null;
- }
-}
\ No newline at end of file
Modified:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -3,7 +3,7 @@
import org.jboss.envers.entities.mapper.PropertyMapper;
import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyDetachedInitializor;
+import org.jboss.envers.entities.mapper.relation.lazy.DetachedRelationInitializor;
import org.jboss.envers.entities.mapper.id.IdMapper;
import org.jboss.envers.reader.VersionsReaderImplementor;
import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
@@ -37,10 +37,10 @@
private final DetachedRelationQueryGenerator queryGenerator;
public OneToManyDetachedMapper(VersionsEntitiesConfiguration verEntCfg, String
referencingEntityName,
- String referencedEntityName, String
collectionReferencingPropertyName,
- String versionsReferencedEntityName, String
versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper
referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
+ String referencedEntityName, String
collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String
versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper
referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
super(referencingEntityName, collectionReferencingPropertyName);
this.verEntCfg = verEntCfg;
@@ -115,7 +115,7 @@
VersionsReaderImplementor versionsReader,
Class<?>
entityClass, Object primaryKey,
Number revision,
Class<T> collectionClass) {
- return new OneToManyDetachedInitializor<T>(verCfg, referencedEntityName,
queryGenerator,
+ return new DetachedRelationInitializor<T>(verCfg, referencedEntityName,
queryGenerator,
versionsReader, primaryKey, revision, collectionClass);
}
}
Deleted:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,112 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import
org.jboss.envers.entities.mapper.relation.lazy.OneToManyUnidirectionalInitializor;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.jboss.envers.RevisionType;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalMapper extends AbstractOneToManyMapper implements
PropertyMapper {
- private final VersionsEntitiesConfiguration verEntCfg;
- private final String referencedEntityName;
- private final String collectionReferencingPropertyName;
- private final String versionsMiddleEntityName;
- private final IdMapper referencingMiddleIdMapper;
- private final IdMapper referencedMiddleIdMapper;
-
- private final UnidirectionalRelationQueryGenerator queryGenerator;
-
- public OneToManyUnidirectionalMapper(VersionsEntitiesConfiguration verEntCfg, String
referencingEntityName,
- String referencedEntityName, String
collectionReferencingPropertyName,
- String versionsReferencedEntityName, String
versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper
referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- super(referencingEntityName, collectionReferencingPropertyName);
-
- this.verEntCfg = verEntCfg;
- this.referencedEntityName = referencedEntityName;
- this.collectionReferencingPropertyName = collectionReferencingPropertyName;
- this.versionsMiddleEntityName = versionsMiddleEntityName;
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
- this.referencedMiddleIdMapper = referencedMiddleIdMapper;
-
- queryGenerator = new UnidirectionalRelationQueryGenerator(verEntCfg,
versionsReferencedEntityName,
- versionsMiddleEntityName, referencingMiddleIdMapper,
referencedMiddleIdMapper, referencedIdMapper);
- }
-
- private Collection getOldCollection(Serializable oldColl) {
- if (oldColl instanceof Map) {
- return ((Map) oldColl).keySet();
- } else {
- return (Collection) oldColl;
- }
- }
-
- private void addCollectionChanges(List<PersistentCollectionChangeData>
collectionChanges, Set<Object> changed,
- RevisionType revisionType, Serializable id) {
- for (Object changedEntity : changed) {
- Map<String, Object> entityData = new HashMap<String, Object>();
- Map<String, Object> originalId = new HashMap<String, Object>();
- entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
-
- collectionChanges.add(new
PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
- referencingMiddleIdMapper.mapToMapFromId(originalId, id);
- referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
-
- entityData.put(verEntCfg.getRevisionTypePropName(), revisionType);
- }
- }
-
- @SuppressWarnings({"unchecked"})
- public List<PersistentCollectionChangeData> mapCollectionChanges(String
referencingPropertyName,
- PersistentCollection
newColl,
- Serializable
oldColl, Serializable id) {
- if (!collectionReferencingPropertyName.equals(referencingPropertyName)) {
- return null;
- }
-
- List<PersistentCollectionChangeData> collectionChanges = new
ArrayList<PersistentCollectionChangeData>();
-
- Collection newCollection = (Collection) newColl;
- Collection oldCollection = getOldCollection(oldColl);
-
- Set<Object> added = new HashSet<Object>();
- if (newColl != null) { added.addAll(newCollection); }
- if (oldColl != null) { added.removeAll(oldCollection); }
-
- addCollectionChanges(collectionChanges, added, RevisionType.ADD, id);
-
- Set<Object> deleted = new HashSet<Object>();
- if (oldColl != null) { deleted.addAll(oldCollection); }
- if (newColl != null) { deleted.removeAll(newCollection); }
-
- addCollectionChanges(collectionChanges, deleted, RevisionType.DEL, id);
-
- return collectionChanges;
- }
-
- @SuppressWarnings({"unchecked"})
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj,
Object oldObj) {
- // Changes are mapped in the "mapCollectionChanges" method.
- return false;
- }
-
- protected <T extends Collection> Initializor<T>
getInitializator(VersionsConfiguration verCfg,
-
VersionsReaderImplementor versionsReader,
- Class<?>
entityClass, Object primaryKey,
- Number revision,
Class<T> collectionClass) {
- return new OneToManyUnidirectionalInitializor<T>(verCfg,
referencedEntityName, queryGenerator,
- versionsReader, primaryKey, revision, collectionClass);
- }
-}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,87 +0,0 @@
-/*
- * Envers.
http://www.jboss.org/envers
- *
- * Copyright 2008 Red Hat Middleware, LLC. All rights reserved.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT A WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License, v.2.1 along with this distribution; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * Red Hat Author(s): Adam Warski
- */
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.tools.reflection.ReflectionTools;
-import org.jboss.envers.query.VersionsRestrictions;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.hibernate.property.Setter;
-import org.hibernate.NonUniqueResultException;
-import org.hibernate.collection.PersistentCollection;
-
-import javax.persistence.NoResultException;
-import java.util.Map;
-import java.util.List;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToOneIdMapper implements PropertyMapper {
- private String owningReferencePropertyName;
- private String owningEntityName;
- private String propertyName;
-
- public OneToOneIdMapper(String owningReferencePropertyName, String owningEntityName,
String propertyName) {
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.owningEntityName = owningEntityName;
- this.propertyName = propertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj,
Object oldObj) {
- return false;
- }
-
- public void mapToEntityFromMap(VersionsConfiguration verCfg, Object obj, Map data,
Object primaryKey, VersionsReaderImplementor versionsReader, Number revision) {
- if (obj == null) {
- return;
- }
-
- Class<?> entityClass = ReflectionTools.loadClass(owningEntityName);
-
- Object value;
-
- try {
- value = versionsReader.createQuery().forEntitiesAtRevision(entityClass,
revision)
- .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName,
primaryKey)).getSingleResult();
- } catch (NoResultException e) {
- value = null;
- } catch (NonUniqueResultException e) {
- throw new VersionsException("Many versions results for one-to-one
relationship: (" + owningEntityName +
- ", " + owningReferencePropertyName + ")");
- }
-
- Setter setter = ReflectionTools.getSetter(obj.getClass(), propertyName);
- setter.set(obj, value, null);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChanges(String
referencingPropertyName,
-
PersistentCollection newColl,
-
Serializable oldColl,
-
Serializable id) {
- return null;
- }
-}
Deleted:
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,93 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.id.QueryParameterData;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.RevisionType;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.hibernate.Query;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class UnidirectionalRelationQueryGenerator {
- private final String queryString;
- private final IdMapper referencingMiddleIdMapper;
-
- public UnidirectionalRelationQueryGenerator(VersionsEntitiesConfiguration verEntCfg,
- String versionsReferencedEntityName, String
versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper
referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
-
- /*
- * The query that we need to create:
- * SELECT e FROM versionsReferencedEntity e, middleEntity ee
- * WHERE
- * (selecting e entities at revision :revision)
- * e.revision = (SELECT max(e2.revision) FROM referencedEntity e2
- * WHERE e2.revision <= :revision AND e2.id1 = e.id1) AND
- * (only entities referenced by the association)
- * ee.id1 = e.id1 AND
- * ee.id2 = :id2 AND
- * (the association at revision :revision)
- * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2
- * WHERE ee2.revision <= :revision AND ee2.id2 = :id2 AND ee2.id1 =
ee.id1) AND
- * (only non-deleted entities and associations)
- * ee.revision_type != DEL AND
- * e.revision_type != DEL
- */
- String revisionPropertyPath = verEntCfg.getRevisionPropPath();
- String originalIdPropertyName = verEntCfg.getOriginalIdPropName();
-
- StringBuilder querySB = new StringBuilder();
- querySB
- .append("SELECT e FROM
").append(versionsReferencedEntityName).append(" e")
- .append(", ").append(versionsMiddleEntityName).append(" ee
")
- .append("WHERE ")
- // e.revision = (SELECT max(e2.revision) ...
- .append("e.").append(revisionPropertyPath).append(" =
(SELECT max(e2.").append(revisionPropertyPath)
- .append(") FROM
").append(versionsReferencedEntityName).append(" e2 ")
- // e2.revision <= :revision
- .append("WHERE e2.").append(revisionPropertyPath).append("
<= :revision AND ")
- // e2.id1 = e.id1)
- .append(referencedIdMapper.getIdsEqualQuery("e." +
originalIdPropertyName, "e2." + originalIdPropertyName))
- .append(") AND ")
- // ee.id1 = e.id1
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." +
originalIdPropertyName,
- referencedIdMapper, "e." + originalIdPropertyName))
- .append(" AND ")
- // ee.id2 = :id2
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee." +
originalIdPropertyName, true))
- .append(" AND ")
- // ee.revision = (SELECT max(ee2.revision) ...
- .append("ee.").append(revisionPropertyPath).append(" =
(SELECT max(ee2.").append(revisionPropertyPath)
- .append(") FROM
").append(versionsMiddleEntityName).append(" ee2 ")
- // ee2.revision <= :revision
- .append("WHERE
ee2.").append(revisionPropertyPath).append(" <= :revision AND ")
- // ee2.id2 = :id2)
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee2." +
originalIdPropertyName, true))
- .append(" AND ")
- // ee2.id1 = ee.id1)
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." +
originalIdPropertyName, "ee2." + originalIdPropertyName))
- .append(") AND ")
- // e.revision_type != DEL AND
-
.append("e.").append(verEntCfg.getRevisionTypePropName()).append(" !=
").append(":delrevisiontype")
- .append(" AND ")
- // ee.revision_type != DEL
-
.append("ee.").append(verEntCfg.getRevisionTypePropName()).append(" !=
").append(":delrevisiontype");
-
- queryString = querySB.toString();
- }
-
- public Query getQuery(VersionsReaderImplementor versionsReader, Object primaryKey,
Number revision) {
- Query query = versionsReader.getSession().createQuery(queryString);
- query.setParameter("revision", revision);
- query.setParameter("delrevisiontype", RevisionType.DEL);
- for (QueryParameterData paramData:
referencingMiddleIdMapper.mapToQueryParametersFromId(primaryKey)) {
- paramData.setParameterValue(query);
- }
-
- return query;
- }
-}
Copied:
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java
(from rev 124,
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java)
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java
(rev 0)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -0,0 +1,55 @@
+package org.jboss.envers.entities.mapper.relation.lazy;
+
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.DetachedRelationQueryGenerator;
+import org.jboss.envers.entities.EntityInstantiator;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.exception.VersionsException;
+import org.jboss.envers.configuration.VersionsConfiguration;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DetachedRelationInitializor<T extends Collection> implements
Initializor<T> {
+ private final VersionsConfiguration verCfg;
+ private final String entityName;
+ private final DetachedRelationQueryGenerator queryGenerator;
+ private final VersionsReaderImplementor versionsReader;
+ private final Object primaryKey;
+ private final Number revision;
+ private final Class<T> collectionClass;
+
+ public DetachedRelationInitializor(VersionsConfiguration verCfg, String entityName,
+ DetachedRelationQueryGenerator
queryGenerator,
+ VersionsReaderImplementor versionsReader,
Object primaryKey,
+ Number revision, Class<T>
collectionClass) {
+ this.verCfg = verCfg;
+ this.entityName = entityName;
+ this.queryGenerator = queryGenerator;
+ this.versionsReader = versionsReader;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg,
versionsReader);
+
+ List queryResult = queryGenerator.getQuery(versionsReader, primaryKey,
revision).list();
+
+ T result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ entityInstantiator.addInstancesFromVersionsEntities(entityName, result,
queryResult, revision);
+
+ return result;
+ }
+}
Deleted:
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,74 +0,0 @@
-/*
- * Envers.
http://www.jboss.org/envers
- *
- * Copyright 2008 Red Hat Middleware, LLC. All rights reserved.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT A WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License, v.2.1 along with this distribution; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * Red Hat Author(s): Adam Warski
- */
-package org.jboss.envers.entities.mapper.relation.lazy;
-
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.query.VersionsRestrictions;
-import org.jboss.envers.exception.VersionsException;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalInitializor<T extends Collection> implements
Initializor<T> {
- private VersionsReaderImplementor versionsReader;
- private Class<?> entityClass;
- private String owningReferencePropertyName;
- private Object primaryKey;
- private Number revision;
- private Class<T> collectionClass;
-
- public OneToManyBidirectionalInitializor(VersionsReaderImplementor versionsReader,
Class<?> entityClass,
- String owningReferencePropertyName, Object primaryKey,
Number revision,
- Class<T> collectionClass) {
- this.versionsReader = versionsReader;
- this.entityClass = entityClass;
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- List queryResult =
versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
- .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName,
primaryKey)).getResultList();
-
- if (collectionClass.isAssignableFrom(queryResult.getClass())) {
- return (T) queryResult;
- } else {
- Collection result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- result.addAll(queryResult);
-
- return (T) result;
- }
- }
-}
Deleted:
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
===================================================================
---
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,55 +0,0 @@
-package org.jboss.envers.entities.mapper.relation.lazy;
-
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.UnidirectionalRelationQueryGenerator;
-import org.jboss.envers.entities.EntityInstantiator;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalInitializor<T extends Collection> implements
Initializor<T> {
- private final VersionsConfiguration verCfg;
- private final String entityName;
- private final UnidirectionalRelationQueryGenerator queryGenerator;
- private final VersionsReaderImplementor versionsReader;
- private final Object primaryKey;
- private final Number revision;
- private final Class<T> collectionClass;
-
- public OneToManyUnidirectionalInitializor(VersionsConfiguration verCfg, String
entityName,
- UnidirectionalRelationQueryGenerator
queryGenerator,
- VersionsReaderImplementor versionsReader,
Object primaryKey,
- Number revision, Class<T>
collectionClass) {
- this.verCfg = verCfg;
- this.entityName = entityName;
- this.queryGenerator = queryGenerator;
- this.versionsReader = versionsReader;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg,
versionsReader);
-
- List queryResult = queryGenerator.getQuery(versionsReader, primaryKey,
revision).list();
-
- T result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- entityInstantiator.addInstancesFromVersionsEntities(entityName, result,
queryResult, revision);
-
- return result;
- }
-}
Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-22 16:24:06
UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-23 10:59:58
UTC (rev 125)
@@ -45,7 +45,7 @@
private VersionsConfiguration verCfg;
private void generateBidirectionalCollectionChangeWorkUnits(VersionsSync verSync,
EntityPersister entityPersister,
- String entityName, Object[] newState,
Object[] oldState) {
+ String entityName,
Object[] newState, Object[] oldState) {
// Checking if this is enabled in configuration ...
if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
return;
@@ -73,7 +73,7 @@
Serializable id = (Serializable)
idMapper.mapToIdFromEntity(newValue);
verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
}
-
+
if (oldValue != null) {
Serializable id = (Serializable)
idMapper.mapToIdFromEntity(oldValue);
verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
@@ -128,14 +128,22 @@
if (verCfg.getEntCfg().isVersioned(entityName)) {
VersionsSync verSync = verCfg.getSyncManager().get(event.getSession());
- VersionsWorkUnit workUnit = new
PersistentCollectionChangeWorkUnit(entityName, verCfg, newColl,
- collectionEntry.getRole(), oldColl,
event.getAffectedOwnerIdOrNull());
+ PersistentCollectionChangeWorkUnit workUnit = new
PersistentCollectionChangeWorkUnit(entityName, verCfg,
+ newColl, collectionEntry.getRole(), oldColl,
event.getAffectedOwnerIdOrNull());
verSync.addWorkUnit(workUnit);
if (workUnit.containsWork()) {
// There are some changes: a revision needs also be generated for the
collection owner
verSync.addWorkUnit(new
CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
event.getAffectedOwnerIdOrNull(),
event.getAffectedOwnerOrNull()));
+
+ // Checking if this is not a bidirectional relation - then, a revision
needs also be generated for
+ // the other side of the relation.
+ RelationDescription relDesc =
verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
+ workUnit.getReferencingPropertyName());
+ if (relDesc.isBidirectional()) {
+ // TODO: we have to add a revision for each changed element of the
collection
+ }
}
}
}
Modified:
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
===================================================================
---
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -15,13 +15,14 @@
*/
public class PersistentCollectionChangeWorkUnit extends AbstractVersionsWorkUnit
implements VersionsWorkUnit {
private final List<PersistentCollectionChangeData> collectionChanges;
+ private final String referencingPropertyName;
public PersistentCollectionChangeWorkUnit(String entityName, VersionsConfiguration
verCfg,
PersistentCollection collection, String
role,
Serializable snapshot, Serializable id) {
super(entityName, verCfg, null);
- String referencingPropertyName = role.substring(entityName.length() + 1);
+ referencingPropertyName = role.substring(entityName.length() + 1);
collectionChanges = verCfg.getEntCfg().get(getEntityName()).getPropertyMapper()
.mapCollectionChanges(referencingPropertyName, collection, snapshot,
id);
@@ -44,6 +45,10 @@
}
}
+ public String getReferencingPropertyName() {
+ return referencingPropertyName;
+ }
+
public KeepCheckResult check(AddWorkUnit second) {
return null;
}
Modified: trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java 2008-08-22
16:24:06 UTC (rev 124)
+++ trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -103,7 +103,7 @@
ed2_id = ed2.getId();
ing1_id = ing1.getId();
- ing2_id = ing1.getId();
+ ing2_id = ing2.getId();
}
@Test
Modified:
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
===================================================================
---
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -78,7 +78,7 @@
@Test
public void testTableName() {
assert "UNI_NAMING_TEST_versions".equals(
-
getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+
getCfg().getClassMapping("org.jboss.envers.test.integration.naming.DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getName());
}
@@ -86,7 +86,7 @@
@Test
public void testJoinColumnName() {
Iterator<Column> columns =
-
getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+
getCfg().getClassMapping("org.jboss.envers.test.integration.naming..DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getColumnIterator();
boolean id1Found = false;
Deleted:
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
===================================================================
---
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java 2008-08-22
16:24:06 UTC (rev 124)
+++
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java 2008-08-23
10:59:58 UTC (rev 125)
@@ -1,85 +0,0 @@
-package org.jboss.envers.test.integration.naming;
-
-import org.jboss.envers.Versioned;
-import org.jboss.envers.test.entities.StrTestEntity;
-
-import javax.persistence.*;
-import java.util.Set;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-@Entity
-public class UnidirectionalNamingTestEntity {
- @Id
- private Integer id;
-
- @Versioned
- private String data;
-
- @Versioned
- @OneToMany
- @JoinTable(name = "UNI_NAMING_TEST",
- joinColumns = @JoinColumn(name = "ID_1"),
- inverseJoinColumns = @JoinColumn(name = "ID_2"))
- private Set<StrTestEntity> collection;
-
- public UnidirectionalNamingTestEntity() {
- }
-
- public UnidirectionalNamingTestEntity(Integer id, String data) {
- this.id = id;
- this.data = data;
- }
-
- public UnidirectionalNamingTestEntity(String data) {
- this.data = data;
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public Set<StrTestEntity> getCollection() {
- return collection;
- }
-
- public void setCollection(Set<StrTestEntity> collection) {
- this.collection = collection;
- }
-
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof UnidirectionalNamingTestEntity)) return false;
-
- UnidirectionalNamingTestEntity that = (UnidirectionalNamingTestEntity) o;
-
- if (data != null ? !data.equals(that.data) : that.data != null) return false;
- if (id != null ? !id.equals(that.id) : that.id != null) return false;
-
- return true;
- }
-
- public int hashCode() {
- int result;
- result = (id != null ? id.hashCode() : 0);
- result = 31 * result + (data != null ? data.hashCode() : 0);
- return result;
- }
-
- public String toString() {
- return "UnidirectionalNamingTestEntity(id = " + id + ", data =
" + data + ")";
- }
-}
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-22 16:24:06 UTC
(rev 124)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-23 10:59:58 UTC
(rev 125)
@@ -77,11 +77,28 @@
entityManager.getTransaction().commit();
+ // Rev 2
+ entityManager.getTransaction().begin();
+
+ we1_3 = entityManager.find(WorkingEntity1.class, we1_3.getId1());
+
+ WorkingEntity2 we2_1 = new WorkingEntity2("s2");
+ we1s = new HashSet<WorkingEntity1>();
+ we1s.add(we1_3);
+ we2_1.setWe1s(we1s);
+ entityManager.persist(we2_1);
+
+ entityManager.getTransaction().commit();
+
//
entityManager.getTransaction().begin();
VersionsReader vr = VersionsReaderFactory.get(entityManager);
+ System.out.println("1: " + vr.find(WorkingEntity1.class,
we1_3.getId1(), 1).getWe2s());
+ System.out.println("2: " + vr.find(WorkingEntity1.class,
we1_3.getId1(), 2).getWe2s());
+ System.out.println("Revs we1_3: " +
vr.getRevisions(WorkingEntity1.class, we1_3.getId1()));
+
entityManager.getTransaction().commit();
}
}