KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > cayenne > jpa > bridge > JpaSelectQuery


1 /*****************************************************************
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  ****************************************************************/

19
20
21 package org.apache.cayenne.jpa.bridge;
22
23 import java.util.Collections JavaDoc;
24
25 import org.apache.cayenne.jpa.map.JpaQueryHint;
26 import org.apache.cayenne.CayenneRuntimeException;
27 import org.apache.cayenne.exp.Expression;
28 import org.apache.cayenne.map.EntityResolver;
29 import org.apache.cayenne.query.Query;
30 import org.apache.cayenne.query.SelectQuery;
31
32 /**
33  * An indirect query that resolves to Cayenne SelectQuery using information from JPA query
34  * hints.
35  *
36  * @author Andrus Adamchik
37  */

38 public class JpaSelectQuery extends JpaIndirectQuery {
39
40     /**
41      * Creates a SelectQuery using query hints.
42      */

43     @Override JavaDoc
44     protected Query createReplacementQuery(EntityResolver resolver) {
45         SelectQuery query = new SelectQuery();
46
47         if (parentEntity != null) {
48             query.setRoot(parentEntity);
49         }
50         else {
51             throw new CayenneRuntimeException("No parent entity. Query name: "
52                     + getName());
53         }
54
55         // metadata hints
56

57         JpaQueryHint dataRowsHint = jpaQuery.getHint(QueryHints.DATA_ROWS_HINT);
58         if (dataRowsHint != null) {
59             query.setFetchingDataRows("true".equalsIgnoreCase(dataRowsHint.getValue()));
60         }
61
62         // other hints
63

64         JpaQueryHint qualifierHint = jpaQuery.getHint(QueryHints.QUALIFIER_HINT);
65         if (qualifierHint != null) {
66             query.setQualifier(Expression.fromString(qualifierHint.getValue()));
67         }
68
69         return query.queryWithParameters(parameters != null
70                 ? parameters
71                 : Collections.EMPTY_MAP);
72     }
73 }
74
Popular Tags