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?
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!