Author: aadamchik
Date: Wed Aug 8 07:57:47 2007
New Revision: 563907
URL: http://svn.apache.org/viewvc?view=rev&rev=563907
Log:
CAY-843 Remove arbitrary reverse relationship mapping limitations
(preventing FK attributes on entity sync)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java?view=diff&rev=563907&r1=563906&r2=563907
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
Wed Aug 8 07:57:47 2007
@@ -189,6 +189,7 @@
List missing = new ArrayList();
Iterator it = objEntity.getDbEntity().getAttributes().iterator();
Collection rels = objEntity.getDbEntity().getRelationships();
+ Collection incomingRels =
getIncomingRelationships(objEntity.getDbEntity());
while (it.hasNext()) {
DbAttribute dba = (DbAttribute) it.next();
@@ -220,11 +221,48 @@
if (isFK) {
continue;
}
+
+ // check incoming relationships
+ rit = incomingRels.iterator();
+ while (!isFK && rit.hasNext()) {
+ DbRelationship rel = (DbRelationship) rit.next();
+ Iterator jit = rel.getJoins().iterator();
+ while (jit.hasNext()) {
+ DbJoin join = (DbJoin) jit.next();
+ if (join.getTarget() == dba) {
+ isFK = true;
+ break;
+ }
+ }
+ }
+
+ if (isFK) {
+ continue;
+ }
missing.add(dba);
}
return missing;
+ }
+
+ private Collection getIncomingRelationships(DbEntity entity) {
+
+ Collection incoming = new ArrayList();
+ Iterator entities = entity.getDataMap().getDbEntities().iterator();
+ while(entities.hasNext()) {
+ DbEntity nextEntity = (DbEntity) entities.next();
+
+ Iterator relationships = nextEntity.getRelationships().iterator();
+ while(relationships.hasNext()) {
+ DbRelationship relationship = (DbRelationship)
relationships.next();
+ if(entity == relationship.getTargetEntity()) {
+ incoming.add(relationship);
+ }
+ }
+ }
+
+ return incoming;
}
protected List getRelationshipsToAdd(ObjEntity objEntity) {