/*
* 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.entity.internal;
import java.util.Collections;
import java.util.Set;
import org.hibernate.orm.persister.common.spi.SingularAttribute;
import org.hibernate.orm.persister.entity.spi.EntityPersister;
import org.hibernate.orm.persister.entity.spi.IdClassDescriptor;
import org.hibernate.orm.persister.entity.spi.IdentifierDescriptorNonAggregatedEmbedded;
import org.hibernate.orm.type.spi.EmbeddedType;
import org.hibernate.orm.type.spi.Type;
import org.hibernate.query.sqm.NotYetImplementedException;
import org.hibernate.query.sqm.domain.SqmNavigable;
import org.hibernate.query.sqm.domain.type.SqmDomainTypeEmbeddable;
/**
* @author Steve Ebersole
*/
public class IdentifierDescriptorNonAggregatedEmbeddedImpl implements IdentifierDescriptorNonAggregatedEmbedded {
private final EntityPersister entityPersister;
private final EmbeddedType idType;
// NOTE : JPA requires these to have an IdClass, so we work with that assumption here for testing
private final IdClassDescriptor idClassDescriptor;
public IdentifierDescriptorNonAggregatedEmbeddedImpl(
EntityPersister entityPersister,
EmbeddedType idType,
EmbeddedType idClassType) {
this.entityPersister = entityPersister;
this.idClassDescriptor = new IdClassDescriptorImpl( idClassType );
this.idType = idType;
}
@Override
public Set<SingularAttribute> getIdentifierAttributes() {
throw new NotYetImplementedException( );
}
@Override
public Type getIdType() {
return idClassDescriptor.getType();
}
@Override
public boolean hasSingleIdAttribute() {
return false;
}
@Override
public String getReferableAttributeName() {
return "<id>";
}
@Override
public IdClassDescriptor getIdClassDescriptor() {
return idClassDescriptor;
}
@Override
public SqmDomainTypeEmbeddable getExportedDomainType() {
return idType;
}
@Override
public String asLoggableText() {
return entityPersister.asLoggableText() + ".<id>";
}
@Override
public EntityPersister getSource() {
return entityPersister;
}
@Override
public String getNavigableName() {
return "<id>";
}
@Override
public String getTypeName() {
return entityPersister.getTypeName();
}
@Override
public PersistenceType getPersistenceType() {
return PersistenceType.EMBEDDABLE;
}
@Override
public Class getJavaType() {
return idType.getJavaTypeDescriptor().getJavaType();
}
@Override
public SqmNavigable findNavigable(String navigableName) {
return idType.getEmbeddableMapper().findNavigable( navigableName );
}
static class IdClassDescriptorImpl implements IdClassDescriptor {
private final EmbeddedType idClassType;
private final Set<SingularAttribute> idClassAttributes = Collections.emptySet();
public IdClassDescriptorImpl(EmbeddedType idClassType) {
this.idClassType = idClassType;
}
@Override
public Type getType() {
return idClassType;
}
@Override
public Set<SingularAttribute> getAttributes() {
return idClassAttributes;
}
}
}