org.hibernate.mapping.ToOne 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 .
*/
package org.hibernate.mapping;
import java.util.Objects;
import org.hibernate.FetchMode;
import org.hibernate.MappingException;
import org.hibernate.boot.model.relational.MappedTable;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.internal.util.ReflectHelper;
/**
* A simple-point association (ie. a reference to another entity).
* @author Gavin King
*/
public abstract class ToOne extends SimpleValue implements Fetchable {
private FetchMode fetchMode;
protected String referencedPropertyName;
private String referencedEntityName;
private String propertyName;
private boolean lazy = true;
protected boolean unwrapProxy;
protected boolean referenceToPrimaryKey = true;
protected ToOne(MetadataBuildingContext buildingContext, Table table) {
super( buildingContext, table );
}
protected ToOne(MetadataBuildingContext buildingContext, MappedTable table) {
super( buildingContext, table );
}
public FetchMode getFetchMode() {
return fetchMode;
}
public void setFetchMode(FetchMode fetchMode) {
this.fetchMode=fetchMode;
}
public abstract ForeignKey createForeignKey() throws MappingException;
public String getReferencedPropertyName() {
return referencedPropertyName;
}
public void setReferencedPropertyName(String name) {
referencedPropertyName = name==null ? null : name.intern();
}
public String getReferencedEntityName() {
return referencedEntityName;
}
public void setReferencedEntityName(String referencedEntityName) {
this.referencedEntityName = referencedEntityName==null ?
null : referencedEntityName.intern();
}
public String getPropertyName() {
return propertyName;
}
public void setPropertyName(String propertyName) {
this.propertyName = propertyName==null ?
null : propertyName.intern();
}
@Override
public void setTypeUsingReflection(String className, String propertyName) throws MappingException {
if (referencedEntityName == null) {
final ClassLoaderService cls = getMetadataBuildingContext().getBootstrapContext()
.getServiceRegistry()
.getService( ClassLoaderService.class );
referencedEntityName = ReflectHelper.reflectedPropertyClass( className, propertyName, cls ).getName();
}
}
public boolean isTypeSpecified() {
return referencedEntityName!=null;
}
@Override
public boolean isSame(Value other) {
return other instanceof ToOne && isSame( (ToOne) other );
}
@Override
public boolean isSame(SimpleValue other) {
return other instanceof ToOne && isSame( (ToOne) other );
}
public boolean isSame(ToOne other) {
return super.isSame( other )
&& Objects.equals( referencedPropertyName, other.referencedPropertyName )
&& Objects.equals( referencedEntityName, other.referencedEntityName );
}
@Override
public boolean isValid() throws MappingException {
if ( referencedEntityName == null ) {
throw new MappingException("association must specify the referenced entity");
}
return super.isValid( );
}
public boolean isLazy() {
return lazy;
}
public void setLazy(boolean lazy) {
this.lazy = lazy;
}
public boolean isUnwrapProxy() {
return unwrapProxy;
}
public void setUnwrapProxy(boolean unwrapProxy) {
this.unwrapProxy = unwrapProxy;
}
public boolean isReferenceToPrimaryKey() {
return referenceToPrimaryKey;
}
public void setReferenceToPrimaryKey(boolean referenceToPrimaryKey) {
this.referenceToPrimaryKey = referenceToPrimaryKey;
}
}