package org.hibernate.mapping;
import org.hibernate.MappingException;
import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.engine.spi.Mapping;
public abstract class IdentifierCollection extends Collection {
public static final String DEFAULT_IDENTIFIER_COLUMN_NAME = "id";
private KeyValue identifier;
@Deprecated
public IdentifierCollection(MetadataImplementor metadata, PersistentClass owner) {
super( metadata, owner );
}
public IdentifierCollection(MetadataBuildingContext buildingContext, PersistentClass owner) {
super( buildingContext, owner );
}
public KeyValue getIdentifier() {
return identifier;
}
public void setIdentifier(KeyValue identifier) {
this.identifier = identifier;
}
public final boolean isIdentified() {
return true;
}
@Override
public boolean isSame(Collection other) {
return other instanceof IdentifierCollection
&& isSame( (IdentifierCollection) other );
}
public boolean isSame(IdentifierCollection other) {
return super.isSame( other )
&& isSame( identifier, other.identifier );
}
void createPrimaryKey() {
if ( !isOneToMany() ) {
PrimaryKey pk = new PrimaryKey( getCollectionTable() );
pk.addColumns( getIdentifier().getColumnIterator() );
getCollectionTable().setPrimaryKey(pk);
}
}
public void validate(Mapping mapping) throws MappingException {
super.validate( mapping );
assert getElement() != null : "IdentifierCollection identifier not bound : " + getRole();
if ( !getIdentifier().isValid(mapping) ) {
throw new MappingException(
"collection id mapping has wrong number of columns: " +
getRole() +
" type: " +
getIdentifier().getType().getName()
);
}
}
}