/*
* 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.orm.persister.embeddable.spi;
import java.util.Collections;
import java.util.List;
import javax.persistence.metamodel.EmbeddableType;
import org.hibernate.mapping.Component;
import org.hibernate.orm.persister.common.spi.Column;
import org.hibernate.orm.persister.common.spi.JoinColumnMapping;
import org.hibernate.orm.persister.common.spi.ManagedTypeImplementor;
import org.hibernate.orm.persister.common.spi.OrmAttribute;
import org.hibernate.orm.persister.common.spi.OrmTypeExporter;
import org.hibernate.orm.persister.spi.PersisterCreationContext;
import org.hibernate.orm.sql.convert.spi.TableGroupProducer;
import org.hibernate.orm.type.spi.EmbeddedType;
/**
* Mapping for an embedded value. Represents a specific usage of an embeddable/composite
*
* @author Steve Ebersole
*/
public interface EmbeddableMapper<T>
extends ManagedTypeImplementor<T>, OrmTypeExporter, EmbeddableContainer<T>, EmbeddableType<T> {
void afterInitialization(
Component embeddableBinding,
PersisterCreationContext creationContext);
String getRoleName();
List<Column> collectColumns();
@Override
default PersistenceType getPersistenceType() {
return PersistenceType.EMBEDDABLE;
}
@Override
EmbeddableContainer<?> getSource();
@Override
EmbeddedType getOrmType();
@Override
default EmbeddedType getExportedDomainType() {
return getOrmType();
}
@Override
default String getTypeName() {
return getOrmType().getJavaTypeDescriptor().getTypeName();
}
@Override
@SuppressWarnings("unchecked")
default Class<T> getJavaType() {
return (Class<T>) getOrmType().getJavaTypeDescriptor().getJavaType();
}
@Override
default boolean canCompositeContainCollections() {
return getSource().canCompositeContainCollections();
}
@Override
default TableGroupProducer resolveTableGroupProducer() {
return getSource().resolveTableGroupProducer();
}
@Override
default List<JoinColumnMapping> resolveJoinColumnMappings(OrmAttribute attribute) {
return Collections.emptyList();
}
@Override
default String asLoggableText() {
return "EmbeddableMapper(" + getTypeName() + " [" + getRoleName() + "])";
}
}