Author: athimel Date: 2012-07-03 14:24:53 +0200 (Tue, 03 Jul 2012) New Revision: 2598 Url: http://nuiton.org/repositories/revision/topia/2598 Log: Fix association class DAO generation Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2012-07-03 12:24:04 UTC (rev 2597) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2012-07-03 12:24:53 UTC (rev 2598) @@ -966,11 +966,20 @@ boolean isAssoc) { String attrName = attr.getName(); String attrType = attr.getType(); - String propertyName = attrName; + String propertyName = clazzName + "." + getConstantName(attrName); if (!isAssoc && attr.hasAssociationClass()) { - propertyName = TopiaGeneratorUtil.toLowerCaseFirstLetter( - attr.getAssociationClass().getName()) + '.' + propertyName; + String assocClassName = attr.getAssociationClass().getName(); + String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); + // It is about transitivity : use the property to access the + // associationClass + '.' + the property to access the expected + // attribute + // <class>.<attrAssoc> + '.' + <assocClass>.<attr> + propertyName = + clazzName + '.' + getConstantName(assocAttrName) + + " + '.' + " + + assocClassName + '.' + getConstantName(attrName); } + ObjectModelOperation op; op = addOperation(result, getJavaBeanMethodName("findBy", attrName), @@ -980,7 +989,7 @@ addParameter(op, attrType, "v"); setOperationBody(op, "" /*{ - E result = findByProperty(<%=clazzName + "." + getConstantName(propertyName)%>, v); + E result = findByProperty(<%=propertyName%>, v); return result; }*/ ); @@ -993,14 +1002,16 @@ addParameter(op, attrType, "v"); setOperationBody(op, "" /*{ - List<E> result = findAllByProperty(<%=clazzName + "." + getConstantName(propertyName)%>, v); + List<E> result = findAllByProperty(<%=propertyName%>, v); return result; }*/ ); - if (attr.hasAssociationClass()) { + if (!isAssoc && attr.hasAssociationClass()) { String assocClassName = attr.getAssociationClass().getName(); String assocClassFQN = attr.getAssociationClass().getQualifiedName(); + String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); + String assocPropertyConstantName = getConstantName(assocAttrName); op = addOperation(result, getJavaBeanMethodName("findBy", assocClassName), "E", @@ -1009,7 +1020,7 @@ addParameter(op, assocClassFQN, "value"); setOperationBody(op, "" /*{ - E result = findByProperty(<%=clazzName + "." + getConstantName(TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName))%>, value); + E result = findByProperty(<%=clazzName + "." + assocPropertyConstantName%>, value); return result; }*/ ); @@ -1022,7 +1033,7 @@ addParameter(op, assocClassFQN, "value"); setOperationBody(op, "" /*{ - List<E> result = findAllByProperty(<%=clazzName + "." + getConstantName(TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName))%>, value); + List<E> result = findAllByProperty(<%=clazzName + "." + assocPropertyConstantName%>, value); return result; }*/ );