//////////////////////
 * 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.