Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.metamodel.binding;
import java.util.Properties;
import org.hibernate.MappingException;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.PersistentIdentifierGenerator;
import org.hibernate.id.factory.IdentifierGeneratorFactory;
import org.hibernate.mapping.PropertyGeneration;
import org.hibernate.metamodel.domain.SingularAttribute;
import org.hibernate.metamodel.relational.Column;
import org.hibernate.metamodel.relational.Schema;
import org.hibernate.metamodel.relational.SimpleValue;
import org.hibernate.metamodel.source.MetaAttributeContext;
/**
* TODO : javadoc
*
* @author Steve Ebersole
*/
public class BasicAttributeBinding
extends AbstractSingularAttributeBinding
implements KeyValueBinding {
private String unsavedValue;
private PropertyGeneration generation;
private boolean includedInOptimisticLocking;
private boolean forceNonNullable;
private boolean forceUnique;
private boolean keyCascadeDeleteEnabled;
private MetaAttributeContext metaAttributeContext;
BasicAttributeBinding(
AttributeBindingContainer container,
SingularAttribute attribute,
boolean forceNonNullable,
boolean forceUnique) {
super( container, attribute );
this.forceNonNullable = forceNonNullable;
this.forceUnique = forceUnique;
}
@Override
public boolean isAssociation() {
return false;
}
@Override
public String getUnsavedValue() {
return unsavedValue;
}
public void setUnsavedValue(String unsavedValue) {
this.unsavedValue = unsavedValue;
}
@Override
public PropertyGeneration getGeneration() {
return generation;
}
public void setGeneration(PropertyGeneration generation) {
this.generation = generation;
}
public boolean isIncludedInOptimisticLocking() {
return includedInOptimisticLocking;
}
public void setIncludedInOptimisticLocking(boolean includedInOptimisticLocking) {
this.includedInOptimisticLocking = includedInOptimisticLocking;
}
@Override
public boolean isKeyCascadeDeleteEnabled() {
return keyCascadeDeleteEnabled;
}
public void setKeyCascadeDeleteEnabled(boolean keyCascadeDeleteEnabled) {
this.keyCascadeDeleteEnabled = keyCascadeDeleteEnabled;
}
public boolean forceNonNullable() {
return forceNonNullable;
}
public boolean forceUnique() {
return forceUnique;
}
public MetaAttributeContext getMetaAttributeContext() {
return metaAttributeContext;
}
public void setMetaAttributeContext(MetaAttributeContext metaAttributeContext) {
this.metaAttributeContext = metaAttributeContext;
}
IdentifierGenerator createIdentifierGenerator(
IdGenerator idGenerator,
IdentifierGeneratorFactory identifierGeneratorFactory,
Properties properties) {
Properties params = new Properties();
params.putAll( properties );
// use the schema/catalog specified by getValue().getTable() - but note that
// if the schema/catalog were specified as params, they will already be initialized and
//will override the values set here (they are in idGenerator.getParameters().)
Schema schema = getValue().getTable().getSchema();
if ( schema != null ) {
if ( schema.getName().getSchema() != null ) {
params.setProperty( PersistentIdentifierGenerator.SCHEMA, schema.getName().getSchema().getName() );
}
if ( schema.getName().getCatalog() != null ) {
params.setProperty( PersistentIdentifierGenerator.CATALOG, schema.getName().getCatalog().getName() );
}
}
// TODO: not sure how this works for collection IDs...
//pass the entity-name, if not a collection-id
//if ( rootClass!=null) {
params.setProperty( IdentifierGenerator.ENTITY_NAME, getContainer().seekEntityBinding().getEntity().getName() );
//}
//init the table here instead of earlier, so that we can get a quoted table name
//TODO: would it be better to simply pass the qualified table name, instead of
// splitting it up into schema/catalog/table names
String tableName = getValue().getTable().getQualifiedName( identifierGeneratorFactory.getDialect() );
params.setProperty( PersistentIdentifierGenerator.TABLE, tableName );
//pass the column name (a generated id almost always has a single column)
if ( getSimpleValueSpan() > 1 ) {
throw new MappingException(
"A SimpleAttributeBinding used for an identifier has more than 1 Value: " + getAttribute().getName()
);
}
SimpleValue simpleValue = (SimpleValue) getValue();
if ( !Column.class.isInstance( simpleValue ) ) {
throw new MappingException(
"Cannot create an IdentifierGenerator because the value is not a column: " +
simpleValue.toLoggableString()
);
}
params.setProperty(
PersistentIdentifierGenerator.PK,
( (Column) simpleValue ).getColumnName().encloseInQuotesIfQuoted(
identifierGeneratorFactory.getDialect()
)
);
// TODO: is this stuff necessary for SimpleValue???
//if (rootClass!=null) {
// StringBuffer tables = new StringBuffer();
// Iterator iter = rootClass.getIdentityTables().iterator();
// while ( iter.hasNext() ) {
// Table table= (Table) iter.next();
// tables.append( table.getQuotedName(dialect) );
// if ( iter.hasNext() ) tables.append(", ");
// }
// params.setProperty( PersistentIdentifierGenerator.TABLES, tables.toString() );
//}
//else {
params.setProperty( PersistentIdentifierGenerator.TABLES, tableName );
//}
params.putAll( idGenerator.getParameters() );
return identifierGeneratorFactory.createIdentifierGenerator(
idGenerator.getStrategy(), getHibernateTypeDescriptor().getResolvedTypeMapping(), params
);
}
}