/*
* 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.common.internal;
import java.util.Collections;
import java.util.List;
import javax.persistence.metamodel.Type;
import org.hibernate.orm.persister.common.spi.AbstractSingularAttribute;
import org.hibernate.orm.persister.common.spi.Column;
import org.hibernate.orm.persister.common.spi.JoinColumnMapping;
import org.hibernate.orm.persister.common.spi.JoinableOrmAttribute;
import org.hibernate.orm.persister.common.spi.ManagedTypeImplementor;
import org.hibernate.orm.persister.common.spi.SingularAttribute;
import org.hibernate.orm.persister.embeddable.spi.EmbeddableReference;
import org.hibernate.orm.persister.embeddable.spi.EmbeddableMapper;
import org.hibernate.orm.type.spi.EmbeddedType;
import org.hibernate.property.access.spi.PropertyAccess;
import org.hibernate.query.sqm.domain.SqmNavigable;
import org.hibernate.query.sqm.domain.SqmSingularAttributeEmbedded;
/**
* @author Steve Ebersole
*/
public class SingularAttributeEmbedded
extends AbstractSingularAttribute<EmbeddedType>
implements SingularAttribute, EmbeddableReference, JoinableOrmAttribute, SqmSingularAttributeEmbedded {
private final EmbeddableMapper embeddablePersister;
public SingularAttributeEmbedded(
ManagedTypeImplementor declaringType,
String attributeName,
PropertyAccess propertyAccess,
Disposition disposition,
EmbeddableMapper embeddablePersister) {
super( declaringType, attributeName, propertyAccess, embeddablePersister.getOrmType(), disposition, true );
this.embeddablePersister = embeddablePersister;
}
public EmbeddableMapper getEmbeddablePersister() {
return embeddablePersister;
}
@Override
public SingularAttributeClassification getAttributeTypeClassification() {
return SingularAttributeClassification.EMBEDDED;
}
@Override
public List<Column> getColumns() {
return embeddablePersister.collectColumns();
}
@Override
public String asLoggableText() {
return toString();
}
@Override
public List<JoinColumnMapping> getJoinColumnMappings() {
// there are no columns involved in a join to an embedded/composite attribute
return Collections.emptyList();
}
@Override
public Type getType() {
return getEmbeddablePersister();
}
@Override
public PersistentAttributeType getPersistentAttributeType() {
return PersistentAttributeType.EMBEDDED;
}
@Override
public boolean isAssociation() {
return false;
}
@Override
public PersistenceType getPersistenceType() {
return PersistenceType.EMBEDDABLE;
}
@Override
public SqmNavigable findNavigable(String navigableName) {
return getEmbeddablePersister().findNavigable( navigableName );
}
@Override
public EmbeddedType getExportedDomainType() {
return getOrmType();
}
}