Search in sources :

Example 1 with IndexBackref

use of org.hibernate.mapping.IndexBackref in project hibernate-orm by hibernate.

the class ListBinder method bindIndex.

private void bindIndex(final MetadataBuildingContext buildingContext) {
    if (!indexColumn.isImplicit()) {
        PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder(this.collection, StringHelper.qualify(this.collection.getRole(), "key"), null, null, propertyHolder, getBuildingContext());
        List list = (List) this.collection;
        if (!list.isOneToMany())
            indexColumn.forceNotNull();
        indexColumn.setPropertyHolder(valueHolder);
        SimpleValueBinder value = new SimpleValueBinder();
        value.setColumns(new Ejb3Column[] { indexColumn });
        value.setExplicitType("integer");
        value.setBuildingContext(getBuildingContext());
        SimpleValue indexValue = value.make();
        indexColumn.linkWithValue(indexValue);
        list.setIndex(indexValue);
        list.setBaseIndex(indexColumn.getBase());
        if (list.isOneToMany() && !list.getKey().isNullable() && !list.isInverse()) {
            String entityName = ((OneToMany) list.getElement()).getReferencedEntityName();
            PersistentClass referenced = buildingContext.getMetadataCollector().getEntityBinding(entityName);
            IndexBackref ib = new IndexBackref();
            ib.setName('_' + propertyName + "IndexBackref");
            ib.setUpdateable(false);
            ib.setSelectable(false);
            ib.setCollectionRole(list.getRole());
            ib.setEntityName(list.getOwner().getEntityName());
            ib.setValue(list.getIndex());
            referenced.addProperty(ib);
        }
    } else {
        Collection coll = this.collection;
        throw new AnnotationException("List/array has to be annotated with an @OrderColumn (or @IndexColumn): " + coll.getRole());
    }
}
Also used : PropertyHolder(org.hibernate.cfg.PropertyHolder) Collection(org.hibernate.mapping.Collection) AnnotationException(org.hibernate.AnnotationException) List(org.hibernate.mapping.List) IndexBackref(org.hibernate.mapping.IndexBackref) OneToMany(org.hibernate.mapping.OneToMany) SimpleValue(org.hibernate.mapping.SimpleValue) PersistentClass(org.hibernate.mapping.PersistentClass)

Example 2 with IndexBackref

use of org.hibernate.mapping.IndexBackref in project hibernate-orm by hibernate.

the class ModelBinder method createIndexBackRef.

private void createIndexBackRef(MappingDocument mappingDocument, IndexedPluralAttributeSource pluralAttributeSource, IndexedCollection collectionBinding) {
    if (collectionBinding.isOneToMany() && !collectionBinding.getKey().isNullable() && !collectionBinding.isInverse()) {
        final String entityName = ((OneToMany) collectionBinding.getElement()).getReferencedEntityName();
        final PersistentClass referenced = mappingDocument.getMetadataCollector().getEntityBinding(entityName);
        final IndexBackref ib = new IndexBackref();
        ib.setName('_' + collectionBinding.getOwnerEntityName() + "." + pluralAttributeSource.getName() + "IndexBackref");
        ib.setUpdateable(false);
        ib.setSelectable(false);
        ib.setCollectionRole(collectionBinding.getRole());
        ib.setEntityName(collectionBinding.getOwner().getEntityName());
        ib.setValue(collectionBinding.getIndex());
        referenced.addProperty(ib);
    }
}
Also used : IndexBackref(org.hibernate.mapping.IndexBackref) OneToMany(org.hibernate.mapping.OneToMany) PluralAttributeElementSourceOneToMany(org.hibernate.boot.model.source.spi.PluralAttributeElementSourceOneToMany) PersistentClass(org.hibernate.mapping.PersistentClass)

Aggregations

IndexBackref (org.hibernate.mapping.IndexBackref)2 OneToMany (org.hibernate.mapping.OneToMany)2 PersistentClass (org.hibernate.mapping.PersistentClass)2 AnnotationException (org.hibernate.AnnotationException)1 PluralAttributeElementSourceOneToMany (org.hibernate.boot.model.source.spi.PluralAttributeElementSourceOneToMany)1 PropertyHolder (org.hibernate.cfg.PropertyHolder)1 Collection (org.hibernate.mapping.Collection)1 List (org.hibernate.mapping.List)1 SimpleValue (org.hibernate.mapping.SimpleValue)1