/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.query.sqm.domain.type;
import org.hibernate.query.sqm.domain.SqmLoggable;
/**
* Represents any "type" used in the domain model.
* <p/>
* Think {@code org.hibernate.type.spi.Type} from Hibernate ORM.
* <p/>
* Mainly used to represent a singular memento we can embed into the SQM tree
* for the consumer to be able to map back to its "type system"
*
* @author Steve Ebersole
*
* @deprecated {@link org.hibernate.type.spi.Type}
*/
@Deprecated
public interface SqmDomainType<T> extends SqmLoggable {
/**
* The underlying physical Java type. May be {@code null}.
* <p/>
* Important to *not* define this as {@code Optional<Class>}. Because the
* Java type is optional, it would seem "more natural" to define it as Optional,
* but we cannot. The reason mainly because ORM binds this contract to the JPA
* {@link javax.persistence.metamodel.Type} contract which defines this
* same method name returning just {@code Class} (no Optional).
*/
Class<T> getJavaType();
}