Class Query
- All Implemented Interfaces:
Serializable
,ASTNode
Entityの検索をする際利用するクエリーを表現するクラスです。 SQLライクな検索条件を指定可能です。
Queryをインスタンス化する方法として、2種類あります。
- EQL(Entity Query Language、SQLライクな文法)を文字列として指定し、newQuery()、newPreparedQuery()を通してQueryインスタンスを取得する方法
- コード上から、Queryのインスタンスをnewして条件を設定する方法
EQL(Entity Query Language)からQueryをインスタンス化
コード例:
Query q = Query.newQuery("select oid, name, orderId, totalamount, detail.amount from OrderEntity where orderDate > '2011-10-01' and orderStatus='5'"); or Query q = new Query("select oid, name, orderId, totalamount, detail.amount from OrderEntity where orderDate > '2011-10-01' and orderStatus='5'");※EQLの文法は、下記BNFを参考にしてください。
コードからQueryをインスタンス化
コード例:
Query q = new Query() .select("oid", "name", "orderId", "totalamount", "detail.amount") .from("OrderEntity") .where(new And().gt("orderDate", "2011-10-01").eq("orderStatus", "5"));
EQLのBNF
※BNFを拡張した記述式の説明
・[] = オプションの要素
・{} = グループ化された要素
・* = 0回以上の繰り返し
・"" = 明示的な文字列(BNFの式やシンボルではない)を示す
<query> ::= <select clause> <from clause> [<refer clause>] [<where clause>] [<group by clause>] [<having clause>] [<order by clause>] [<limit clause>]
<select clause> ::= SELECT [DISTINCT] <value expression> {,<value expression>}*
<from clause> ::= FROM <entity name>
<refer clause> ::= REFER <reference> [ON <condition>] [AS OF <value expression>] {,REFER <reference> [ON <condition>] [AS OF <value expression>]}*
<where clause> ::= WHERE <condition>
<group by clause> ::= GROUP BY <value expression> {,<value expression>}* [ROLLUP | CUBE]
<having clause> ::= HAVING <condition>
<order by clause> ::= ORDER BY <sort spec> {,<sort spec>}*
<sort spec> ::= <value expression> [ASC | DESC] [NULLS FIRST | NULLS LAST]
<limit clause> ::= LIMIT 件数 [OFFSET 開始行]
<condition> ::= <and> | <or> | <not> | <paren>
<and> ::= <condition> {AND <condition>}*
<or> ::= <condition> {OR <condition>}*
<not> ::= NOT <paren>
<paren> ::= <predicate> | (<condition>)
<predicate> ::= <comparison predicate> | <between> | <contains> | <in> | <is not null> | <is null> | <like>
<comparison predicate> ::= <value expression> <comparison operator> <value expression>
<comparison operator> ::= = | > | >= | < | <= | !=
<between> ::= <value expression> BETWEEN <value expression> AND <value expression>
<contains> ::= "CONTAINS('" <full text search expression> "')"
<in> ::= <simple in> | <row value list in> | <subquery in>
<simple in> ::= <value expression> IN (<value expression> {,<value expression>}*)
<row value list in> ::= (<value expression> {,<value expression>}*) IN (<row value list> {,<row value list>}*)
<row value list> ::= (<value expression> {,<value expression>}*)
<subquery in> ::= {<value expression> IN <subquery>} | {(<value expression> {,<value expression>}*) IN <subquery>}
<is not null> ::= <value expression> IS NOT NULL
<is null> ::= <value expression> IS NULL
<like> ::= <value expression> LIKE "'"<string>"'" [CS | CI]
<value expression> ::= <polynomial> | <term> | <minus sign> | <paren value>
<polynomial> ::= <value expression> {+ <value expression> | - <value expression>}*
<term> ::= <value expression> {"*" <value expression> | / <value expression>}*
<minus sign> ::= - <paren value>
<paren value> ::= <primary value> | (<value expression>)
<primary value> := <aggregate> | <array value> | <case> | <entity field> | <function> | <cast> | <literal> | <scalar subquery> | <window function>
<aggregate> ::= {AVG | MAX | MEDIAN | MIN | MODE | SUM | STDDEV_POP | STDDEV_SAMP | VAR_POP | VAR_SAMP}(<value expression>) | COUNT([DISTINCT] [<value expression>]) | LISTAGG([DISTINCT] <value expression>[,<string literal>]) [WITHIN GROUP(ORDER BY <sort spec> {,<sort spec>}*)]
<array value> ::= "ARRAY[" <value expression> {,<value expression>}* "]"
<case> ::= CASE WHEN <condition> THEN <value expression> {WHEN <condition> THEN <value expression>}* [ELSE <value expression>] END
<entity field> ::= <property name> | <reference>.<property name> | <correlated entity field>
<reference> ::= <reference name>{.<reference name>}*
<function> ::= <function name>() | <function name>(<value expression>{,<value expression>}*)
<function name> ::= REPLACE | UPPER | LOWER | CONCAT | SUBSTR | INSTR | CHAR_LENGTH | MOD | SQRT | POWER | ABS | CEIL | FLOOR | ROUND | TRUNCATE | SIN | COS | TAN | ASIN | ACOS | ATAN | ATAN2 | YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | DATE_ADD | DATE_DIFF | CURRENT_DATE | CURRENT_TIME | CURRENT_DATETIME | LOCALTIME
<cast> ::= CAST(<value expression> AS <data type>)
<data type> ::= STRING | INTEGER | FLOAT | DECIMAL | BOOLEAN | SELECT | DATE | TIME | DATETIME
<scalar subquery> ::= <subquery>
<window function> ::= <window function type> OVER([<window partition by clause>] [<window order by clause>])
<window function type> ::= {ROW_NUMBER | RANK | DENSE_RANK | PERCENT_RANK | CUME_DIST}() | <aggregate>
<window partition by clause> ::= PARTITION BY <value expression> {,<value expression>}*
<window order by clause> ::= ORDER BY <sort spec> {,<sort spec>}*
<literal> ::= <boolean literal> | <string literal> | <integer literal> | <floating point literal> | <fixed point literal> | <datetime literal> | <date literal> | <time literal> | <select value literal> | NULL
<boolean literal> ::= TRUE | FALSE
<string literal> ::= "'" 文字列 "'"
<integer literal> ::= [-]数字[数字]*[i|I]
<floating point literal> ::= [-]数字[数字]*.数字[数字]*[f|F]
<fixed point literal> ::= [-]数字[数字]*.数字[数字]*[g|G]
<datetime literal> ::= "'" yyyy-MM-dd HH:mm:ss.SSS "'"{m|M}
<date literal> ::= "'" yyyy-MM-dd "'"{d|D}
<time literal> ::= "'" HH:mm:ss "'"{t|T}
<select value literal> ::= "'" SelectValueのvalue "'"{s|S}
<entity name> ::= Entityの定義名
<property name> ::= Entity属性の定義名
<reference name> ::= Entity属性(参照)の定義名
<subquery> ::= (<query> [ON <condition>])
<correlated entity field> ::= .[.]*{THIS | <entity field> | <reference>}
※scalar subqueryは単一値(1行1列)を返すsubquery
※correlated entity fieldはsubqueryのON句でのみ利用可能
- See Also:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaccept
(ASTTransformer transformer) void
accept
(QueryVisitor visitor) copy()
boolean
getFrom()
getLimit()
getRefer()
getWhere()
groupBy項目を指定します。int
hashCode()
ヒントを追加します。 注意:selectAllを利用した場合、Selectインスタンスが初期化されるので、selectAllの後に呼び出すこと。boolean
boolean
Deprecated.boolean
limit
(int limit) limit
(int limit, int offset) localized=trueに設定しますlocalized
(boolean localized) static PreparedQuery
newPreparedQuery
(String query) queryでEQL文字列を指定してPreparedQueryインスタンスを生成します。static Query
EQL文字列を指定してQueryインスタンスを生成します。select()
selectを構築します。 その際distinctはfalse(デフォルト値)とします。select
(HintComment hint, Object... value) ヒント句指定しつつ、selectを構築します。 その際distinctはfalse(デフォルト値)とします。selectAll
(String definitionName, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion) selectAll
(String definitionName, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion, boolean withMappedByReference) selectAll
(String definitionName, HintComment hint, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion, boolean withMappedByReference) selectDistinct
(Object... value) selectを構築します。 その際distinctはtrueとします。selectDistinct
(HintComment hint, Object... value) selectを構築します。 その際distinctはtrueとします。void
void
setGroupBy
(GroupBy groupBy) void
void
void
setLocalized
(boolean localized) void
setOrderBy
(OrderBy orderBy) void
void
void
setVersiond
(boolean versioned) Deprecated.void
setVersioned
(boolean versioned) void
toString()
versioned=trueに設定しますversioned
(boolean versioned) where()
-
Constructor Details
-
Query
public Query() -
Query
-
Query
EQL文字列を指定してQueryインスタンスを生成します。- Parameters:
query
-- Throws:
QueryException
-
-
Method Details
-
newQuery
EQL文字列を指定してQueryインスタンスを生成します。- Parameters:
query
-- Returns:
-
newPreparedQuery
queryでEQL文字列を指定してPreparedQueryインスタンスを生成します。- Parameters:
query
-- Returns:
-
copy
-
hashCode
public int hashCode() -
equals
-
toString
-
getSelect
-
setSelect
-
getFrom
-
setFrom
-
getRefer
-
setRefer
-
getWhere
-
setWhere
-
getGroupBy
-
setGroupBy
-
getHaving
-
setHaving
-
getOrderBy
-
setOrderBy
-
getLimit
-
setLimit
-
isVersiond
Deprecated.useisVersioned()
- Returns:
-
setVersiond
Deprecated.- Parameters:
versioned
-
-
isVersioned
public boolean isVersioned() -
setVersioned
public void setVersioned(boolean versioned) -
isLocalized
public boolean isLocalized() -
setLocalized
public void setLocalized(boolean localized) -
accept
-
select
-
selectDistinct
selectを構築します。 その際distinctはtrueとします。- Parameters:
value
- selectする項目(ValueExpression or String)- Returns:
-
selectDistinct
selectを構築します。 その際distinctはtrueとします。- Parameters:
hint
- ヒントコメントvalue
- selectする項目(ValueExpression or String)- Returns:
-
select
selectを構築します。 その際distinctはfalse(デフォルト値)とします。- Parameters:
value
- selectする項目(ValueExpression or String)- Returns:
-
select
ヒント句指定しつつ、selectを構築します。 その際distinctはfalse(デフォルト値)とします。- Parameters:
hint
- ヒントコメントvalue
- selectする項目(ValueExpression or String)- Returns:
-
selectAll
-
selectAll
-
selectAll
-
selectAll
public Query selectAll(String definitionName, HintComment hint, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion, boolean withMappedByReference) -
hint
ヒントを追加します。 注意:selectAllを利用した場合、Selectインスタンスが初期化されるので、selectAllの後に呼び出すこと。- Parameters:
hint
-- Returns:
-
hint
-
from
-
from
-
refer
-
refer
-
refer
-
refer
-
where
-
where
-
where
-
groupBy
groupBy項目を指定します。- Parameters:
groupingField
- groupByする項目(ValueExpression or String)- Returns:
-
having
-
having
-
order
-
limit
-
limit
-
versioned
-
versioned
versioned=trueに設定します- Returns:
-
localized
-
localized
localized=trueに設定します- Returns:
-
accept
-
isVersioned()