|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
An instance of the DataQuery class may be used to access the results of a named query. It is typically used in the following manner:
Named queries are defined in a PDL file using the following syntax:DataQuery query = session.retrieveQuery("MyQuery"); Filter f = query.addEqualsFilter("myProperty", value); query.addOrder("creationDate desc"); int numLines = query.size(); System.out.println("Lines: " + numLines); while (query.next()) { Object prop = query.get("myProperty"); System.out.println("MyProperty: " + prop); }
query MyQuery { do { select * from my_table; } map { myProperty = my_table.my_column; creationDate = my_table.creation_date; } }
Field Summary | |
static String |
versionId
|
Method Summary | |
Filter |
addEqualsFilter(String attribute,
Object value)
This creates the appropriate SQL for the given attribute and passed in value. |
Filter |
addFilter(Filter filter)
This adds the passed in filter to this query and ANDs it with an existing filters. |
Filter |
addFilter(String conditions)
Adds the conditions to the filter that will be used on this query. |
Filter |
addInSubqueryFilter(String propertyName,
String subqueryName)
Add an 'in' subquery to a query. |
Filter |
addInSubqueryFilter(String propertyName,
String subQueryProperty,
String queryName)
Highly experimental; use with caution.. |
Filter |
addNotEqualsFilter(String attribute,
Object value)
This creates the appropriate SQL for the given attribute and passed in value. |
Filter |
addNotInSubqueryFilter(String propertyName,
String subqueryName)
|
void |
addOrder(String order)
Set the order in which the result of this query will be returned. |
void |
addOrderWithNull(String orderOne,
Object orderTwo,
boolean isAscending)
This adds order on the first value if it is not null or the second value if the first value is null. |
void |
addPath(String path)
Adds to the set of paths fetched by this DataQuery. |
void |
alias(String fromPrefix,
String toPrefix)
Alias a compound property name to a different value. |
void |
clearFilter()
Clears the current filter for the data query. |
void |
clearOrder()
Clears the current order clause for the data query. |
void |
close()
Explicitly closes this DataQuery. |
boolean |
first()
Moves the cursor to the first row in the query. |
Object |
get(String propertyName)
Returns the value of the propertyName property associated with the current position in the sequence. |
FilterFactory |
getFilterFactory()
This retrieves the factory that is used to create the filters for this DataQuery |
Object |
getParameter(String parameterName)
Allows a caller to get a parameter value for a parameter that has already been set |
int |
getPosition()
Returns the current position within the sequence. |
Map |
getPropertyValues()
This method returns a map of all property/value pairs. |
CompoundType |
getType()
Returns the type of this data query. |
boolean |
hasProperty(String propertyName)
Returns true if this query fetches the given property. |
boolean |
isAfterLast()
Indicates whether the cursor is after the last row of the query. |
boolean |
isBeforeFirst()
Indicates whether the cursor is before the first row of the query. |
boolean |
isEmpty()
Returns true if the query has no rows. |
boolean |
isFirst()
Indicates whether the cursor is on the first row of the query. |
boolean |
isLast()
Indicates whether the cursor is on the last row of the query. |
boolean |
last()
Moves the cursor to the last row in the query. |
boolean |
next()
Moves the cursor to the next row in the sequence. |
boolean |
previous()
Moves to the previous row in the query. |
boolean |
removeFilter(Filter filter)
Removes the passed in filter from this query if it was directly added to the query. |
void |
reset()
Returns the data query to its initial state by rewinding it and clearing any filters or ordering. |
void |
rewind()
Rewinds the row sequence to the beginning. |
Filter |
setFilter(String conditions)
Deprecated. see addFilter(java.lang.String) |
void |
setOrder(String order)
Deprecated. see addOrder(java.lang.String) |
void |
setParameter(String parameterName,
Object value)
Allows a user to bind a parameter within a named query. |
void |
setRange(Integer beginIndex)
This method allows the developer to set the range of rows desired. |
void |
setRange(Integer beginIndex,
Integer endIndex)
This method allows the developer to set the range of rows desired. |
void |
setReturnsLowerBound(int lowerBound)
This sets the lower bound on the number of rows that can be returned by this query |
void |
setReturnsUpperBound(int upperBound)
This sets the upper bound on the number of rows that can be returned by this query |
long |
size()
Returns the size of this query. |
Field Detail |
public static final String versionId
Method Detail |
public CompoundType getType()
public boolean hasProperty(String propertyName)
propertyName
- A property name.
public void reset()
public boolean first() throws PersistenceException
PersistenceException
- Always thrown!public boolean isEmpty() throws PersistenceException
PersistenceException
public boolean isBeforeFirst() throws PersistenceException
PersistenceException
public boolean isFirst() throws PersistenceException
PersistenceException
public boolean isLast() throws PersistenceException
If the query has not yet been executed, it executes the query.
Not implemented yet.
PersistenceException
public boolean isAfterLast() throws PersistenceException
PersistenceException
public boolean last() throws PersistenceException
Not implemented yet.
PersistenceException
- Always thrown!public boolean previous() throws PersistenceException
PersistenceException
- Always thrown!public void addPath(String path)
DataQuery query = ssn.retrieve("exampleQuery"); query.addPath("foo.bar.name"); query.addPath("foo.bar.desc"); while (query.next()) { BigInteger id = query.get("foo.bar.id"); String name = query.get("foo.bar.name"); String desc = query.get("foo.bar.desc"); }
path
- the additional path to fetchpublic Filter setFilter(String conditions)
addFilter(java.lang.String)
Filter f = query.setFilter("id < :maxId and id > :minId"); f.set("maxId", 10); f.set("minId", 1);
conditions
- the conditions for the filter
public Filter addFilter(String conditions)
select * from (<data query here>) results
where <conditions here>
When adding filters, the user should not use the same parameter name in multiple filters. That is, the following will not work
Filter filter = query.addFilter("priority > :bound");
filter.set("bound", new Integer(3));
filter = query.addFilter("priority < :bound");
filter.set("bound", new Integer(8));
The above actually evaluates to
"priority < 8 and priority > 8"
which is clearly not what the developer wants.
The following will work.
Filter filter = query.addFilter("priority > :lowerBound");
filter.set("lowerBound", new Integer(3));
filter = query.addFilter("priority < :upperBound");
filter.set("upperBound", new Integer(8));
It is actually the same as
Filter filter = query.addFilter("priority > :lowerBound
and priority < :uperBound");
filter.set("upperBound", new Integer(8));
filter.set("lowerBound", new Integer(3));
conditions
- The conditions for the filter. This is a string
that should be used to filter the DataQuery. Specifically,
if this is the first filter added, it appends the information
on to a view-on-the-fly. e.g.
select * from (<data query here>) results
where <conditions here>
unless the WRAP_QUERIES option for the DataQuery is set to "false".
If this is the case, the Filter is simply appended to the end of
the query as follows:
<data query here>)
[where | or] <conditions here>
It should normally take the form of
<attribute_name> <condition> <attribute bind variable>
where the "condition" is something like "=", "<", ">", or
"!=". The "bind variable" should be a colon followed by
some attribute name that will later be set with a call to
Filter.set(java.lang.String,
java.lang.Object)
It is possible to set multiple conditions with a single addFilter statement by combining the conditions with an "and" or an "or". Conditions may be grouped by using parentheses. Consecutive calls to addFilter append the filters using "and".
If there is already a filter that exists for this query
then the passed in conditions are added to the current
conditions with an AND like (<current conditions>)
and (< passed in conditions>)
public Filter addFilter(Filter filter)
public boolean removeFilter(Filter filter)
public Filter addInSubqueryFilter(String propertyName, String subqueryName)
propertyName
- The column to be filtered on.subqueryName
- The full name of a query defined in a PDL file.public Filter addInSubqueryFilter(String propertyName, String subQueryProperty, String queryName)
subQueryProperty
is the column pulled out of the
subquery.
propertyName
- The column to be filtered on.subQueryProperty
- The column in the subquery to be used.queryName
- The full name of a query defined in a PDL file.
public Filter addNotInSubqueryFilter(String propertyName, String subqueryName)
public Filter addEqualsFilter(String attribute, Object value)
attribute
= 'value.toString()'
" unless the value is an integer
(in which case it creates "attribute =
value.toString()") or the developer is using oracle and
the value is null. In this case, it would create
"attribute is null
".
This is simply a convenience method for
addFilter(getFilterFactory().equals(attribute, value));
attribute
- The name of the attribute to bind with the valuevalue
- The value for the specified attributepublic Filter addNotEqualsFilter(String attribute, Object value)
attribute
= 'value.toString()'
" unless the value is an integer
(in which case it creates "attribute !=
value.toString()") or the developer is using oracle and
the value is null. In this case, it would create
"attribute is not null
".
This is simply a convenience method for
addFilter(getFilterFactory().notEquals(attribute, value));
attribute
- The name of the attribute to bind with the valuevalue
- The value for the specified attributepublic void clearFilter()
public FilterFactory getFilterFactory()
public void setOrder(String order) throws PersistenceException
addOrder(java.lang.String)
query.setOrder("creationDate desc, id");
PersistenceException
public void addOrder(String order) throws PersistenceException
query.addOrder("creationDate desc, id");
order
- This String parameter specifies the ordering of the
output. This should be a comma seperated list
of Attribute names (not the database column names)
in the order of precedence.
Separating attributes by commas is the same as
calling addOrder multiple times, each with the
next attribute. For instance, this
addOrder("creationDate");
addOrder("creationUser");
is the same as
addOrder("creationDate, creationUser");
If the items should be ordered in ascending order, the attribute name should be followed by the word "asc" If the items should be ordered in descending order, the attribute should be followed by the word "desc" For instance, or order by ascending date and descending user (for users created with the same date), you would use the following:
addOrder("creationDate asc, creationUser desc");
PersistenceException
public void addOrderWithNull(String orderOne, Object orderTwo, boolean isAscending) throws PersistenceException
orderOne
- This is typically the column that will
be used for the ordering. If this column
is null then the value of orderTwo is used for
the orderingorderTwo
- This is typically an actual value (such as -1)
but can also be a column name the value used
for the orderingisAscending
- If this is true then the items are ordered
in ascending order. Otherwise, they are
ordering in descending order
PersistenceException
- is thrown if the query has
already been executed.public void clearOrder()
public void setParameter(String parameterName, Object value)
parameterName
- The name of the parameter to bindvalue
- The value to assign to the parameterpublic Object getParameter(String parameterName)
parameterName
- The name of the parameter to retrieve
public void setRange(Integer beginIndex)
beginIndex
- This is the number of the first row that
should be returned by this query. Setting
beginIndex to 1 returns all rows. This is
inclusive.public void setRange(Integer beginIndex, Integer endIndex)
beginIndex
- This is the number of the first row that
should be returned by this query. Setting
beginIndex to 1 returns the rows from the
beginning. This is inclusive.endIndex
- This is the number of the row after the last
row that should be returned. That is, this
is exclusive (specifying beginIndex = 1 and
endIndex = 10 returns 9 rows);
A
- PersistenceException is thrown if
endIndex <= beginIndexpublic Map getPropertyValues()
public void setReturnsUpperBound(int upperBound)
public void setReturnsLowerBound(int lowerBound)
public void alias(String fromPrefix, String toPrefix)
fromPrefix
- the prefix that you're mapping from i.e.,
the prefix in the PDL file.toPrefix
- the prefix that you're mapping to i.e.,
the prefix that the programmer is going to use.public void close()
public void rewind()
public Object get(String propertyName)
propertyName
- the name of the property
public int getPosition()
public boolean next()
public long size()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |