Class ColumnSelect<T>
- java.lang.Object
-
- org.apache.cayenne.query.CacheableQuery
-
- org.apache.cayenne.query.AbstractQuery
-
- org.apache.cayenne.query.FluentSelect<T>
-
- org.apache.cayenne.query.ColumnSelect<T>
-
- All Implemented Interfaces:
Serializable
,Query
,Select<T>
public class ColumnSelect<T> extends FluentSelect<T>
A helper builder for queries selecting individual properties based on the root object.
It can be used to select properties of the object itself, properties of related entities or some function calls (including aggregate functions).
Usage examples:
// select list of names: List<String> names = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME).select(context); // select count: long count = ObjectSelect.columnQuery(Artist.class, Property.COUNT).selectOne(); // select only required properties of an entity: List<Object[]> data = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH) .where(Artist.ARTIST_NAME.like("Picasso%)) .select(context);
Note: this class can't be instantiated directly. Use
ObjectSelect
.- Since:
- 4.0
- See Also:
ObjectSelect.columnQuery(Class, Property)
, Serialized Form
-
-
Field Summary
-
Fields inherited from class org.apache.cayenne.query.FluentSelect
dbEntityName, entityName, entityType, having, orderings, where
-
Fields inherited from class org.apache.cayenne.query.AbstractQuery
root
-
Fields inherited from class org.apache.cayenne.query.CacheableQuery
logger
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
ColumnSelect()
protected
ColumnSelect(ObjectSelect<T> select)
Copy constructor to convert ObjectSelect to ColumnSelect
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description ColumnSelect<T>
and(Collection<Expression> expressions)
AND's provided expressions to the existing WHERE or HAVING clause expression.ColumnSelect<T>
and(Expression... expressions)
AND's provided expressions to the existing WHERE clause expression.ColumnSelect<Object[]>
avg(NumericProperty<?> property)
Select average value of propertyColumnSelect<Object[]>
avg(Property<?> property)
Deprecated.since 4.2 useavg(NumericProperty)
ColumnSelect<T>
cacheGroup(String cacheGroup)
ColumnSelect<T>
cacheStrategy(QueryCacheStrategy strategy)
ColumnSelect<T>
cacheStrategy(QueryCacheStrategy strategy, String cacheGroup)
protected <E> ColumnSelect<E>
column(Property<E> property)
ColumnSelect<Object[]>
columns(Collection<Property<?>> properties)
Add properties to select.ColumnSelect<Object[]>
columns(Property<?>... properties)
Add properties to select.ColumnSelect<Object[]>
count()
Shortcut forcolumns(Property[])
columns}(Property.COUNT)ColumnSelect<Object[]>
count(BaseProperty<?> property)
Select COUNT(property)ColumnSelect<T>
dbEntityName(String dbEntityName)
Sets theDbEntity
name to fetch without changing the return type of the query.ColumnSelect<T>
distinct()
Explicitly request distinct in query.ColumnSelect<T>
entityName(String entityName)
Sets theObjEntity
name to fetch without changing the return type of the query.ColumnSelect<T>
entityType(Class<?> entityType)
Sets the type of the entity to fetch without changing the return type of the query.protected org.apache.cayenne.query.BaseQueryMetadata
getBaseMetaData()
Collection<Property<?>>
getColumns()
QueryMetadata
getMetaData(EntityResolver resolver)
Returns default select parameters.ColumnSelect<T>
having(String expressionString, Object... parameters)
Appends a having qualifier expression of this query, using provided expression String and an array of position parameters.ColumnSelect<T>
having(Expression expression)
Appends a having qualifier expression of this query.ColumnSelect<T>
limit(int fetchLimit)
Resets query fetch limit - a parameter that defines max number of objects that should be ever be fetched from the database.ColumnSelect<T>
localCache()
Instructs Cayenne to look for query results in the "local" cache when running the query.ColumnSelect<T>
localCache(String cacheGroup)
Instructs Cayenne to look for query results in the "local" cache when running the query.<E> ColumnSelect<E>
map(Function<T,E> mapper)
Maps result of this query by processing with a given function.ColumnSelect<Object[]>
max(ComparableProperty<?> property)
Select maximum value of propertyColumnSelect<Object[]>
min(ComparableProperty<?> property)
Select minimum value of propertyColumnSelect<T>
offset(int fetchOffset)
Resets query fetch offset - a parameter that defines how many objects should be skipped when reading data from the database.ColumnSelect<T>
or(Collection<Expression> expressions)
OR's provided expressions to the existing WHERE or HAVING clause expression.ColumnSelect<T>
or(Expression... expressions)
OR's provided expressions to the existing WHERE clause expression.ColumnSelect<T>
orderBy(String property)
Add an ascending ordering on the given property.ColumnSelect<T>
orderBy(String property, SortOrder sortOrder)
Add an ordering on the given property.ColumnSelect<T>
orderBy(Collection<Ordering> orderings)
Adds a list of orderings to this query.ColumnSelect<T>
orderBy(Ordering... orderings)
Add one or more orderings to this query.ColumnSelect<T>
pageSize(int pageSize)
Resets query page size.ColumnSelect<T>
prefetch(String path, int semantics)
Merges a prefetch path with specified semantics into the query prefetch tree.ColumnSelect<T>
prefetch(PrefetchTreeNode prefetch)
Merges prefetch into the query prefetch tree.ColumnSelect<T>
queryTimeout(int timeout)
Sets query timeout of PreparedStatement generated for this query.T
selectFirst(ObjectContext context)
Selects a single object using provided context.ColumnSelect<T>
sharedCache()
Instructs Cayenne to look for query results in the "shared" cache when running the query.ColumnSelect<T>
sharedCache(String cacheGroup)
Instructs Cayenne to look for query results in the "shared" cache when running the query.ColumnSelect<T>
statementFetchSize(int size)
Sets fetch size of the PreparedStatement generated for this query.<E extends Number>
ColumnSelect<Object[]>sum(NumericProperty<E> property)
Select sum of values<E extends Number>
ColumnSelect<Object[]>sum(Property<E> property)
Deprecated.since 4.2 usesum(NumericProperty)
ColumnSelect<T>
suppressDistinct()
Explicitly suppress distinct in query.ColumnSelect<T>
where(String expressionString, Object... parameters)
Appends a qualifier expression of this query, using provided expression String and an array of position parameters.ColumnSelect<T>
where(Expression expression)
Appends a qualifier expression of this query.-
Methods inherited from class org.apache.cayenne.query.FluentSelect
batchIterator, createSQLAction, getDbEntityName, getEntityName, getEntityType, getHaving, getLimit, getOffset, getOrderings, getPageSize, getPrefetches, getQueryTimeout, getStatementFetchSize, getWhere, initWithProperties, isDistinct, isFetchingDataRows, iterate, iterator, resolveRoot, route, routePrefetches, select, selectOne
-
Methods inherited from class org.apache.cayenne.query.AbstractQuery
getRoot, setRoot, toString
-
Methods inherited from class org.apache.cayenne.query.CacheableQuery
getCacheGroup, getCacheStrategy, setCacheGroup, setCacheStrategy, useLocalCache, useLocalCache, useSharedCache, useSharedCache
-
-
-
-
Constructor Detail
-
ColumnSelect
protected ColumnSelect()
-
ColumnSelect
protected ColumnSelect(ObjectSelect<T> select)
Copy constructor to convert ObjectSelect to ColumnSelect
-
-
Method Detail
-
entityType
public ColumnSelect<T> entityType(Class<?> entityType)
Sets the type of the entity to fetch without changing the return type of the query.- Returns:
- this object
-
entityName
public ColumnSelect<T> entityName(String entityName)
Sets theObjEntity
name to fetch without changing the return type of the query. This form is most often used for generic entities that don't map to a distinct class.- Returns:
- this object
-
dbEntityName
public ColumnSelect<T> dbEntityName(String dbEntityName)
Sets theDbEntity
name to fetch without changing the return type of the query. This form is most often used for generic entities that don't map to a distinct class.- Returns:
- this object
-
where
public ColumnSelect<T> where(Expression expression)
Appends a qualifier expression of this query. An equivalent toand(Expression...)
that can be used a syntactic sugar.- Returns:
- this object
-
where
public ColumnSelect<T> where(String expressionString, Object... parameters)
Appends a qualifier expression of this query, using provided expression String and an array of position parameters. This is an equivalent to calling "and".- Returns:
- this object
-
and
public ColumnSelect<T> and(Expression... expressions)
AND's provided expressions to the existing WHERE clause expression.- Returns:
- this object
-
or
public ColumnSelect<T> or(Expression... expressions)
OR's provided expressions to the existing WHERE clause expression.- Returns:
- this object
-
orderBy
public ColumnSelect<T> orderBy(String property)
Add an ascending ordering on the given property. If there is already an ordering on this query then add this ordering with a lower priority.- Parameters:
property
- the property to sort on- Returns:
- this object
-
orderBy
public ColumnSelect<T> orderBy(String property, SortOrder sortOrder)
Add an ordering on the given property. If there is already an ordering on this query then add this ordering with a lower priority.- Parameters:
property
- the property to sort onsortOrder
- the direction of the ordering- Returns:
- this object
-
orderBy
public ColumnSelect<T> orderBy(Ordering... orderings)
Add one or more orderings to this query.- Returns:
- this object
-
orderBy
public ColumnSelect<T> orderBy(Collection<Ordering> orderings)
Adds a list of orderings to this query.- Returns:
- this object
-
prefetch
public ColumnSelect<T> prefetch(PrefetchTreeNode prefetch)
Merges prefetch into the query prefetch tree.- Returns:
- this object
-
prefetch
public ColumnSelect<T> prefetch(String path, int semantics)
Merges a prefetch path with specified semantics into the query prefetch tree.- Returns:
- this object
-
limit
public ColumnSelect<T> limit(int fetchLimit)
Resets query fetch limit - a parameter that defines max number of objects that should be ever be fetched from the database.
-
offset
public ColumnSelect<T> offset(int fetchOffset)
Resets query fetch offset - a parameter that defines how many objects should be skipped when reading data from the database.
-
pageSize
public ColumnSelect<T> pageSize(int pageSize)
Resets query page size. A non-negative page size enables query result pagination that saves memory and processing time for large lists if only parts of the result are ever going to be accessed.
-
statementFetchSize
public ColumnSelect<T> statementFetchSize(int size)
Sets fetch size of the PreparedStatement generated for this query. Only non-negative values would change the default size.- See Also:
Statement.setFetchSize(int)
-
queryTimeout
public ColumnSelect<T> queryTimeout(int timeout)
Sets query timeout of PreparedStatement generated for this query.- See Also:
Statement.setQueryTimeout(int)
-
cacheStrategy
public ColumnSelect<T> cacheStrategy(QueryCacheStrategy strategy)
-
cacheStrategy
public ColumnSelect<T> cacheStrategy(QueryCacheStrategy strategy, String cacheGroup)
-
cacheGroup
public ColumnSelect<T> cacheGroup(String cacheGroup)
-
localCache
public ColumnSelect<T> localCache(String cacheGroup)
Instructs Cayenne to look for query results in the "local" cache when running the query. This is a short-hand notation for:query.cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroup);
-
localCache
public ColumnSelect<T> localCache()
Instructs Cayenne to look for query results in the "local" cache when running the query. This is a short-hand notation for:query.cacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
sharedCache
public ColumnSelect<T> sharedCache(String cacheGroup)
Instructs Cayenne to look for query results in the "shared" cache when running the query. This is a short-hand notation for:query.cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroup);
-
sharedCache
public ColumnSelect<T> sharedCache()
Instructs Cayenne to look for query results in the "shared" cache when running the query. This is a short-hand notation for:query.cacheStrategy(QueryCacheStrategy.SHARED_CACHE);
-
columns
public ColumnSelect<Object[]> columns(Property<?>... properties)
Add properties to select.
Can be any properties that can be resolved against root entity type (root entity properties, function call expressions, properties of relationships, etc).
List<Object[]> columns = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME) .columns(Artist.ARTIST_SALARY, Artist.DATE_OF_BIRTH) .select(context);
- Parameters:
properties
- array of properties to select- See Also:
column(Property)
,columns(Collection)
-
columns
public ColumnSelect<Object[]> columns(Collection<Property<?>> properties)
Add properties to select.
Can be any properties that can be resolved against root entity type (root entity properties, function call expressions, properties of relationships, etc).
- Parameters:
properties
- collection of properties, must contain at least one element- See Also:
columns(Property[])
-
column
protected <E> ColumnSelect<E> column(Property<E> property)
-
count
public ColumnSelect<Object[]> count()
Shortcut for
columns(Property[])
columns}(Property.COUNT)
-
count
public ColumnSelect<Object[]> count(BaseProperty<?> property)
Select COUNT(property)
Can return different result than COUNT(*) as it will count only non null values
- See Also:
count()
-
min
public ColumnSelect<Object[]> min(ComparableProperty<?> property)
Select minimum value of property
- See Also:
columns(Property[])
-
max
public ColumnSelect<Object[]> max(ComparableProperty<?> property)
Select maximum value of property
- See Also:
columns(Property[])
-
avg
@Deprecated public ColumnSelect<Object[]> avg(Property<?> property)
Deprecated.since 4.2 useavg(NumericProperty)
Select average value of property
- See Also:
columns(Property[])
-
avg
public ColumnSelect<Object[]> avg(NumericProperty<?> property)
Select average value of property
- See Also:
columns(Property[])
-
sum
@Deprecated public <E extends Number> ColumnSelect<Object[]> sum(Property<E> property)
Deprecated.since 4.2 usesum(NumericProperty)
Select sum of values
- See Also:
columns(Property[])
-
sum
public <E extends Number> ColumnSelect<Object[]> sum(NumericProperty<E> property)
Select sum of values
- See Also:
columns(Property[])
-
having
public ColumnSelect<T> having(Expression expression)
Appends a having qualifier expression of this query. An equivalent toand(Expression...)
that can be used a syntactic sugar.- Returns:
- this object
-
having
public ColumnSelect<T> having(String expressionString, Object... parameters)
Appends a having qualifier expression of this query, using provided expression String and an array of position parameters. This is an equivalent to calling "and".- Returns:
- this object
-
and
public ColumnSelect<T> and(Collection<Expression> expressions)
AND's provided expressions to the existing WHERE or HAVING clause expression.- Returns:
- this object
-
or
public ColumnSelect<T> or(Collection<Expression> expressions)
OR's provided expressions to the existing WHERE or HAVING clause expression.- Returns:
- this object
-
distinct
public ColumnSelect<T> distinct()
Explicitly request distinct in query.
-
suppressDistinct
public ColumnSelect<T> suppressDistinct()
Explicitly suppress distinct in query.
-
getColumns
public Collection<Property<?>> getColumns()
- Overrides:
getColumns
in classFluentSelect<T>
-
selectFirst
public T selectFirst(ObjectContext context)
Description copied from interface:Select
Selects a single object using provided context. The query itself can match any number of objects, but will return only the first one. It returns null if no objects were matched.If it matched more than one object, the first object from the list is returned. This makes 'selectFirst' different from
Select.selectOne(ObjectContext)
, which would throw in this situation. 'selectFirst' is useful e.g. when the query is ordered and we only want to see the first object (e.g. "most recent news article"), etc.Selecting the first object via "Select.selectFirst(ObjectContext)" is more comprehensible than selecting via "ObjectContext.selectFirst(Select)", because implementations of "Select" set fetch size limit to one.
-
getMetaData
public QueryMetadata getMetaData(EntityResolver resolver)
Description copied from class:AbstractQuery
Returns default select parameters.- Specified by:
getMetaData
in interfaceQuery
- Overrides:
getMetaData
in classAbstractQuery
-
getBaseMetaData
protected org.apache.cayenne.query.BaseQueryMetadata getBaseMetaData()
- Specified by:
getBaseMetaData
in classCacheableQuery
-
map
public <E> ColumnSelect<E> map(Function<T,E> mapper)
Maps result of this query by processing with a given function.
Could be used to map plain Object[] to some domain-specific object.
Note: this method could be called multiple time, result will be mapped by all functions in the call order.- Type Parameters:
E
- new result type- Parameters:
mapper
- function that maps result to the required type.- Returns:
- this query with changed result type
- Since:
- 4.2
-
-