Search code examples
spring-roo

Spring Roo generating invalid finder?


Finder def

@RooJpaActiveRecord(finders = {"findIndividualJobsByIndividualAndIndividualJobType"})

Model field

@Enumerated(EnumType.STRING)
@ElementCollection(targetClass=IndividualJobType.class)
private List<IndividualJobType> individualJobType;

Roo is generating this Finder where it mixes String & StringBuffer

    public static TypedQuery<IndividualJob> IndividualJob.findIndividualJobsByIndividualAndIndividualJobType(Individual individual, List<IndividualJobType> individualJobType, String sortFieldName, String sortOrder) {
    if (individual == null) throw new IllegalArgumentException("The individual argument is required");
    if (individualJobType == null) throw new IllegalArgumentException("The individualJobType argument is required");
    EntityManager em = IndividualJob.entityManager();
    StringBuilder queryBuilder = new StringBuilder("SELECT o FROM IndividualJob AS o WHERE o.individual = :individual AND");
    for (int i = 0; i < individualJobType.size(); i++) {
        if (i > 0) queryBuilder.append(" AND");
        queryBuilder.append(" :individualJobType_item").append(i).append(" MEMBER OF o.individualJobType");
    }
    if (fieldNames4OrderClauseFilter.contains(sortFieldName)) {
        jpaQuery = jpaQuery + " ORDER BY " + sortFieldName;
        if ("ASC".equalsIgnoreCase(sortOrder) || "DESC".equalsIgnoreCase(sortOrder)) {
            queryBuilder.append(" " + sortOrder);
        }
    }
    TypedQuery<IndividualJob> q = em.createQuery(queryBuilder.toString(), IndividualJob.class);
    q.setParameter("individual", individual);
    int individualJobTypeIndex = 0;
    for (IndividualJobType _individualjobtype: individualJobType) {
        q.setParameter("individualJobType_item" + individualJobTypeIndex++, _individualjobtype);
    }
    return q;
}

Other non-Enum ElementCollections generate correctly.

Any ideas?


Solution

  • I think you found a bug. Could you report about it on https://jira.spring.io/browse/ROO/? (Thanks!!)

    On the other hand, the workaround could be push-in the method inside .java and fix the code by hand (This is a great point of Roo, you aren't chained to code generated by it ;-) )

    Good luck!