Class Query

java.lang.Object
org.iplass.mtp.entity.query.Query
All Implemented Interfaces:
Serializable, ASTNode

public class Query extends Object implements ASTNode

Entityの検索をする際利用するクエリーを表現するクラスです。 SQLライクな検索条件を指定可能です。

Queryをインスタンス化する方法として、2種類あります。

  • EQL(Entity Query Language、SQLライクな文法)を文字列として指定し、newQuery()、newPreparedQuery()を通してQueryインスタンスを取得する方法
  • コード上から、Queryのインスタンスをnewして条件を設定する方法
Queryのインスタンスを使って、EntityManager経由でEntityを検索します。

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 Details

    • Query

      public Query()
    • Query

      public Query(Select select, From from, Where where)
    • Query

      public Query(String query) throws QueryException
      EQL文字列を指定してQueryインスタンスを生成します。
      Parameters:
      query -
      Throws:
      QueryException
  • Method Details

    • newQuery

      public static Query newQuery(String query)
      EQL文字列を指定してQueryインスタンスを生成します。
      Parameters:
      query -
      Returns:
    • newPreparedQuery

      public static PreparedQuery newPreparedQuery(String query)
      queryでEQL文字列を指定してPreparedQueryインスタンスを生成します。
      Parameters:
      query -
      Returns:
    • copy

      public Query copy()
      Specified by:
      copy in interface ASTNode
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface ASTNode
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in interface ASTNode
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Specified by:
      toString in interface ASTNode
      Overrides:
      toString in class Object
    • getSelect

      public Select getSelect()
    • setSelect

      public void setSelect(Select select)
    • getFrom

      public From getFrom()
    • setFrom

      public void setFrom(From from)
    • getRefer

      public List<Refer> getRefer()
    • setRefer

      public void setRefer(List<Refer> refer)
    • getWhere

      public Where getWhere()
    • setWhere

      public void setWhere(Where where)
    • getGroupBy

      public GroupBy getGroupBy()
    • setGroupBy

      public void setGroupBy(GroupBy groupBy)
    • getHaving

      public Having getHaving()
    • setHaving

      public void setHaving(Having having)
    • getOrderBy

      public OrderBy getOrderBy()
    • setOrderBy

      public void setOrderBy(OrderBy orderBy)
    • getLimit

      public Limit getLimit()
    • setLimit

      public void setLimit(Limit limit)
    • isVersiond

      @Deprecated public boolean isVersiond()
      Deprecated.
      Returns:
    • setVersiond

      @Deprecated public void setVersiond(boolean versioned)
      Deprecated.
      Parameters:
      versioned -
    • isVersioned

      public boolean isVersioned()
    • setVersioned

      public void setVersioned(boolean versioned)
    • isLocalized

      public boolean isLocalized()
    • setLocalized

      public void setLocalized(boolean localized)
    • accept

      public void accept(QueryVisitor visitor)
    • select

      public Select select()
    • selectDistinct

      public Query selectDistinct(Object... value)
      selectを構築します。 その際distinctはtrueとします。
      Parameters:
      value - selectする項目(ValueExpression or String)
      Returns:
    • selectDistinct

      public Query selectDistinct(HintComment hint, Object... value)
      selectを構築します。 その際distinctはtrueとします。
      Parameters:
      hint - ヒントコメント
      value - selectする項目(ValueExpression or String)
      Returns:
    • select

      public Query select(Object... value)
      selectを構築します。 その際distinctはfalse(デフォルト値)とします。
      Parameters:
      value - selectする項目(ValueExpression or String)
      Returns:
    • select

      public Query select(HintComment hint, Object... value)
      ヒント句指定しつつ、selectを構築します。 その際distinctはfalse(デフォルト値)とします。
      Parameters:
      hint - ヒントコメント
      value - selectする項目(ValueExpression or String)
      Returns:
    • selectAll

      public Query selectAll(String definitionName, boolean distinct, boolean withReferenceOidAndName)
    • selectAll

      public Query selectAll(String definitionName, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion)
    • selectAll

      public Query selectAll(String definitionName, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion, boolean withMappedByReference)
    • selectAll

      public Query selectAll(String definitionName, HintComment hint, boolean distinct, boolean withReferenceOidAndName, boolean withReferenceVersion, boolean withMappedByReference)
    • hint

      public Query hint(Hint hint)
      ヒントを追加します。 注意:selectAllを利用した場合、Selectインスタンスが初期化されるので、selectAllの後に呼び出すこと。
      Parameters:
      hint -
      Returns:
    • hint

      public Query hint(List<Hint> hintList)
    • from

      public Query from(String entityName)
    • from

      public Query from(String entityName, AsOf asOf)
    • refer

      public Query refer(String referenceName, Condition onCondition)
    • refer

      public Query refer(String referenceName, AsOf asOf)
    • refer

      public Query refer(String referenceName, AsOf asOf, Condition onCondition)
    • refer

      public Refer refer(String referenceName)
    • where

      public Where where()
    • where

      public Query where(String whereClause)
    • where

      public Query where(Condition whereCondition)
    • groupBy

      public Query groupBy(Object... groupingField)
      groupBy項目を指定します。
      Parameters:
      groupingField - groupByする項目(ValueExpression or String)
      Returns:
    • having

      public Query having(Condition havingCondition)
    • having

      public Query having(String havingClause)
    • order

      public Query order(SortSpec... sortSpec)
    • limit

      public Query limit(int limit)
    • limit

      public Query limit(int limit, int offset)
    • versioned

      public Query versioned(boolean versioned)
    • versioned

      public Query versioned()
      versioned=trueに設定します
      Returns:
    • localized

      public Query localized(boolean localized)
    • localized

      public Query localized()
      localized=trueに設定します
      Returns:
    • accept

      public ASTNode accept(ASTTransformer transformer)
      Specified by:
      accept in interface ASTNode