////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////


If a domain class uses more than one `DataSource` then you can use the namespace implied by each `DataSource` name to make GORM calls for a particular `DataSource`. For example, consider this class which uses two `DataSource` instances:

[source,groovy]
----
class ZipCode {

   String code

   static mapping = {
      datasources(['lookup', 'auditing'])
   }
}
----

The first `DataSource` specified is the default when not using an explicit namespace, so in this case we default to 'lookup'. But you can call GORM methods on the 'auditing' `DataSource` with the `DataSource` name, for example:

[source,groovy]
----
def zipCode = ZipCode.auditing.get(42)
...
zipCode.auditing.save()
----

As you can see, you add the `DataSource` to the method call in both the static case and the instance case.

You can use `Where` queries:

[source,groovy]
----
def results = ZipCode.where {
    code ==~ '995%'
}.withConnection('auditing').list()
----

or `Criteria` queries:

[source,groovy]
----
def c = ZipCode.auditing.createCriteria()
def results = c.list {
    like('code','995%')
}
----

TIP: The namespace syntax (e.g., `ZipCode.auditing.get(42)`) is only needed when a domain is mapped to multiple datasources and you need to target a specific one. For domains mapped to a single non-default datasource, static methods like `ZipCode.get(42)` route to the correct datasource automatically and work under `@CompileStatic`. You can also use a Data Service with `@Transactional(connection = 'auditing')` for automatic routing of auto-implemented methods. See the <<dataServicesMultipleDataSources,Data Services and Multiple Datasources>> section for the full pattern.
