Fixed: Fluent API Bug in getFieldList().
Thanks Benjamin Jugl for reporting and providing the patch.
@@ -22,7 +22,7 @@ import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -63,7 +63,7 @@ public class EntityQuery {
private Integer resultSetType = EntityFindOptions.TYPE_FORWARD_ONLY;
private Integer fetchSize = null;
private Integer maxRows = null;
- private Boolean distinct = null;
+ private boolean distinct = false;
private EntityCondition havingEntityCondition = null;
private boolean filterByDate = false;
private Timestamp filterByDateMoment;
@@ -471,9 +471,7 @@ public class EntityQuery {
if (maxRows != null) {
findOptions.setMaxRows(maxRows);
}
- if (distinct != null) {
findOptions.setDistinct(distinct);
- }
return findOptions;
}
@@ -520,10 +518,21 @@ public class EntityQuery {
return EntityCondition.makeCondition(conditions);
}
+ /**
+ * Gets a list of values (no matter which type) for a specified entity field name.
+ * <p>
+ * The field of the entity is first selected and the cache usage turned off to ensure no values are missing.
+ * @param <T>
+ * @param fieldName
+ * @return list with field values
+ * @throws GenericEntityException
+ */
public <T> List<T> getFieldList(final String fieldName) throws GenericEntityException {select(fieldName);
+ select(fieldName);
+ cache(false);
try (EntityListIterator genericValueEli = queryIterator()) {
- if (Boolean.TRUE.equals(this.distinct)) {
- Set<T> distinctSet = new HashSet<>();
+ if (this.distinct) {
+ Set<T> distinctSet = new LinkedHashSet<T>();
GenericValue value = null;
while ((value = genericValueEli.next()) != null) {
T fieldValue = UtilGenerics.<T>cast(value.get(fieldName));
