use of org.hibernate.mapping.IdentifierCollection in project hibernate-orm by hibernate.
the class InFlightMetadataCollectorImpl method processExportableProducers.
private void processExportableProducers(MetadataBuildingContext buildingContext) {
// for now we only handle id generators as ExportableProducers
final Dialect dialect = getDatabase().getJdbcEnvironment().getDialect();
final String defaultCatalog = extractName(getDatabase().getDefaultNamespace().getName().getCatalog(), dialect);
final String defaultSchema = extractName(getDatabase().getDefaultNamespace().getName().getSchema(), dialect);
for (PersistentClass entityBinding : entityBindingMap.values()) {
if (entityBinding.isInherited()) {
continue;
}
handleIdentifierValueBinding(entityBinding.getIdentifier(), dialect, defaultCatalog, defaultSchema, (RootClass) entityBinding);
}
for (Collection collection : collectionBindingMap.values()) {
if (!IdentifierCollection.class.isInstance(collection)) {
continue;
}
handleIdentifierValueBinding(((IdentifierCollection) collection).getIdentifier(), dialect, defaultCatalog, defaultSchema, null);
}
}
use of org.hibernate.mapping.IdentifierCollection in project hibernate-orm by hibernate.
the class InFlightMetadataCollectorImpl method processExportableProducers.
private void processExportableProducers() {
// for now we only handle id generators as ExportableProducers
final Dialect dialect = getDatabase().getJdbcEnvironment().getDialect();
final String defaultCatalog = extractName(getDatabase().getDefaultNamespace().getName().getCatalog(), dialect);
final String defaultSchema = extractName(getDatabase().getDefaultNamespace().getName().getSchema(), dialect);
for (PersistentClass entityBinding : entityBindingMap.values()) {
if (entityBinding.isInherited()) {
continue;
}
handleIdentifierValueBinding(entityBinding.getIdentifier(), dialect, defaultCatalog, defaultSchema, (RootClass) entityBinding);
}
for (Collection collection : collectionBindingMap.values()) {
if (!IdentifierCollection.class.isInstance(collection)) {
continue;
}
handleIdentifierValueBinding(((IdentifierCollection) collection).getIdentifier(), dialect, defaultCatalog, defaultSchema, null);
}
}
use of org.hibernate.mapping.IdentifierCollection in project hibernate-orm by hibernate.
the class IdBagBinder method bindStarToManySecondPass.
@Override
protected boolean bindStarToManySecondPass(Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns, Ejb3JoinColumn[] keyColumns, Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns, boolean isEmbedded, XProperty property, boolean unique, TableBinder associationTableBinder, boolean ignoreNotFound, MetadataBuildingContext buildingContext) {
boolean result = super.bindStarToManySecondPass(persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded, property, unique, associationTableBinder, ignoreNotFound, getBuildingContext());
CollectionId collectionIdAnn = property.getAnnotation(CollectionId.class);
if (collectionIdAnn != null) {
SimpleValueBinder simpleValue = new SimpleValueBinder();
PropertyData propertyData = new WrappedInferredData(new PropertyInferredData(null, property, // default access should not be useful
null, buildingContext.getBootstrapContext().getReflectionManager()), "id");
Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation(collectionIdAnn.columns(), null, Nullability.FORCED_NOT_NULL, propertyHolder, propertyData, Collections.EMPTY_MAP, buildingContext);
// we need to make sure all id columns must be not-null.
for (Ejb3Column idColumn : idColumns) {
idColumn.setNullable(false);
}
Table table = collection.getCollectionTable();
simpleValue.setTable(table);
simpleValue.setColumns(idColumns);
Type typeAnn = collectionIdAnn.type();
if (typeAnn != null && !BinderHelper.isEmptyAnnotationValue(typeAnn.type())) {
simpleValue.setExplicitType(typeAnn);
} else {
throw new AnnotationException("@CollectionId is missing type: " + StringHelper.qualify(propertyHolder.getPath(), propertyName));
}
simpleValue.setBuildingContext(getBuildingContext());
SimpleValue id = simpleValue.make();
((IdentifierCollection) collection).setIdentifier(id);
String generator = collectionIdAnn.generator();
String generatorType;
if ("identity".equals(generator) || "assigned".equals(generator) || "sequence".equals(generator) || "native".equals(generator)) {
generatorType = generator;
generator = "";
} else {
generatorType = null;
}
SecondPass secondPass = new IdGeneratorResolverSecondPass(id, property, generatorType, generator, getBuildingContext());
buildingContext.getMetadataCollector().addSecondPass(secondPass);
}
return result;
}
Aggregations