//////////////////////
 * Copyright (c) 2007-2012, Niclas Hedhman. All Rights Reserved.
 *
 * Licensed 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
 * http://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.
//////////////////////

[[core-api-transient,TransientComposite]]
= TransientComposite =
TransientComposite is a Composite meta type for all other cases. The main characteristics are;

    * It can not be serialized nor persisted.
    * hashcode/equals are not treated specially and will be delegated to fragment(s) implementing those methods.
    * It can not be used as a Property type.