org.hibernate.metamodel.model.domain.internal.EntityTypeImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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.metamodel.model.domain.internal;
import java.io.Serializable;
import javax.persistence.metamodel.EntityType;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.graph.internal.SubGraphImpl;
import org.hibernate.graph.spi.SubGraphImplementor;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.metamodel.model.domain.spi.EntityTypeDescriptor;
import org.hibernate.metamodel.model.domain.spi.IdentifiableTypeDescriptor;
/**
* Defines the Hibernate implementation of the JPA {@link EntityType} contract.
*
* @author Steve Ebersole
* @author Emmanuel Bernard
*/
public class EntityTypeImpl
extends AbstractIdentifiableType
implements EntityTypeDescriptor, Serializable {
private final String jpaEntityName;
@SuppressWarnings("unchecked")
public EntityTypeImpl(
Class javaType,
IdentifiableTypeDescriptor superType,
PersistentClass persistentClass,
SessionFactoryImplementor sessionFactory) {
super(
javaType,
persistentClass.getEntityName(),
superType,
persistentClass.getDeclaredIdentifierMapper() != null || ( superType != null && superType.hasIdClass() ),
persistentClass.hasIdentifierProperty(),
persistentClass.isVersioned(),
sessionFactory
);
this.jpaEntityName = persistentClass.getJpaEntityName();
}
@Override
public String getName() {
return jpaEntityName;
}
@Override
public BindableType getBindableType() {
return BindableType.ENTITY_TYPE;
}
@Override
public Class getBindableJavaType() {
return getJavaType();
}
@Override
public PersistenceType getPersistenceType() {
return PersistenceType.ENTITY;
}
@Override
public IdentifiableTypeDescriptor getSuperType() {
return super.getSuperType();
}
@Override
@SuppressWarnings("unchecked")
public SubGraphImplementor makeSubGraph(Class subType) {
if ( ! getBindableJavaType().isAssignableFrom( subType ) ) {
throw new IllegalArgumentException(
String.format(
"Entity type [%s] cannot be treated as requested sub-type [%s]",
getName(),
subType.getName()
)
);
}
return new SubGraphImpl( this, true, sessionFactory() );
}
@Override
public SubGraphImplementor makeSubGraph() {
return makeSubGraph( getBindableJavaType() );
}
@Override
public String toString() {
return getName();
}
}