Package org.hibernate.cfg.annotations

Examples of org.hibernate.cfg.annotations.EntityBinder


    PersistentClass persistentClass = makePersistentClass( inheritanceState, superEntity );
    Entity entityAnn = clazzToProcess.getAnnotation( Entity.class );
    org.hibernate.annotations.Entity hibEntityAnn = clazzToProcess.getAnnotation(
        org.hibernate.annotations.Entity.class
    );
    EntityBinder entityBinder = new EntityBinder(
        entityAnn, hibEntityAnn, clazzToProcess, persistentClass, mappings
    );
    entityBinder.setInheritanceState( inheritanceState );

    bindQueries( clazzToProcess, mappings );
    bindFilterDefs( clazzToProcess, mappings );
    bindTypeDefs( clazzToProcess, mappings );
    bindFetchProfiles( clazzToProcess, mappings );
    BinderHelper.bindAnyMetaDefs( clazzToProcess, mappings );

    String schema = "";
    String table = ""; //might be no @Table annotation on the annotated class
    String catalog = "";
    List<UniqueConstraintHolder> uniqueConstraints = new ArrayList<UniqueConstraintHolder>();
    if ( clazzToProcess.isAnnotationPresent( javax.persistence.Table.class ) ) {
      javax.persistence.Table tabAnn = clazzToProcess.getAnnotation( javax.persistence.Table.class );
      table = tabAnn.name();
      schema = tabAnn.schema();
      catalog = tabAnn.catalog();
      uniqueConstraints = TableBinder.buildUniqueConstraintHolders( tabAnn.uniqueConstraints() );
    }

    Ejb3JoinColumn[] inheritanceJoinedColumns = makeInheritanceJoinColumns(
        clazzToProcess, mappings, inheritanceState, superEntity
    );
    Ejb3DiscriminatorColumn discriminatorColumn = null;
    if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.getType() ) ) {
      discriminatorColumn = processDiscriminatorProperties(
          clazzToProcess, mappings, inheritanceState, entityBinder
      );
    }

    entityBinder.setProxy( clazzToProcess.getAnnotation( Proxy.class ) );
    entityBinder.setBatchSize( clazzToProcess.getAnnotation( BatchSize.class ) );
    entityBinder.setWhere( clazzToProcess.getAnnotation( Where.class ) );
      entityBinder.setCache( determineCacheSettings( clazzToProcess, mappings ) );

    //Filters are not allowed on subclasses
    if ( !inheritanceState.hasParents() ) {
      bindFilters( clazzToProcess, entityBinder, mappings );
    }

    entityBinder.bindEntity();

    if ( inheritanceState.hasTable() ) {
      Check checkAnn = clazzToProcess.getAnnotation( Check.class );
      String constraints = checkAnn == null ?
          null :
          checkAnn.constraints();
      entityBinder.bindTable(
          schema, catalog, table, uniqueConstraints,
          constraints, inheritanceState.hasDenormalizedTable() ?
              superEntity.getTable() :
              null
      );
    }
    else if ( clazzToProcess.isAnnotationPresent( Table.class ) ) {
      LOG.invalidTableAnnotation( clazzToProcess.getName() );
    }


    PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder(
        clazzToProcess,
        persistentClass,
        entityBinder, mappings, inheritanceStatePerClass
    );

    javax.persistence.SecondaryTable secTabAnn = clazzToProcess.getAnnotation(
        javax.persistence.SecondaryTable.class
    );
    javax.persistence.SecondaryTables secTabsAnn = clazzToProcess.getAnnotation(
        javax.persistence.SecondaryTables.class
    );
    entityBinder.firstLevelSecondaryTablesBinding( secTabAnn, secTabsAnn );

    OnDelete onDeleteAnn = clazzToProcess.getAnnotation( OnDelete.class );
    boolean onDeleteAppropriate = false;
    if ( InheritanceType.JOINED.equals( inheritanceState.getType() ) && inheritanceState.hasParents() ) {
      onDeleteAppropriate = true;
      final JoinedSubclass jsc = ( JoinedSubclass ) persistentClass;
      SimpleValue key = new DependantValue( mappings, jsc.getTable(), jsc.getIdentifier() );
      jsc.setKey( key );
      ForeignKey fk = clazzToProcess.getAnnotation( ForeignKey.class );
      if ( fk != null && !BinderHelper.isEmptyAnnotationValue( fk.name() ) ) {
        key.setForeignKeyName( fk.name() );
      }
      if ( onDeleteAnn != null ) {
        key.setCascadeDeleteEnabled( OnDeleteAction.CASCADE.equals( onDeleteAnn.action() ) );
      }
      else {
        key.setCascadeDeleteEnabled( false );
      }
      //we are never in a second pass at that stage, so queue it
      SecondPass sp = new JoinedSubclassFkSecondPass( jsc, inheritanceJoinedColumns, key, mappings );
      mappings.addSecondPass( sp );
      mappings.addSecondPass( new CreateKeySecondPass( jsc ) );

    }
    else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.getType() ) ) {
      if ( ! inheritanceState.hasParents() ) {
        if ( inheritanceState.hasSiblings() || !discriminatorColumn.isImplicit() ) {
          //need a discriminator column
          bindDiscriminatorToPersistentClass(
              ( RootClass ) persistentClass,
              discriminatorColumn,
              entityBinder.getSecondaryTables(),
              propertyHolder,
              mappings
          );
          entityBinder.bindDiscriminatorValue();//bind it again since the type might have changed
        }
      }
    }
    else if ( InheritanceType.TABLE_PER_CLASS.equals( inheritanceState.getType() ) ) {
      //nothing to do
    }
        if (onDeleteAnn != null && !onDeleteAppropriate) LOG.invalidOnDeleteAnnotation(propertyHolder.getEntityName());

    // try to find class level generators
    HashMap<String, IdGenerator> classGenerators = buildLocalGenerators( clazzToProcess, mappings );

    // check properties
    final InheritanceState.ElementsToProcess elementsToProcess = inheritanceState.getElementsToProcess();
    inheritanceState.postProcess( persistentClass, entityBinder );

    final boolean subclassAndSingleTableStrategy = inheritanceState.getType() == InheritanceType.SINGLE_TABLE
        && inheritanceState.hasParents();
    Set<String> idPropertiesIfIdClass = new HashSet<String>();
    boolean isIdClass = mapAsIdClass(
        inheritanceStatePerClass,
        inheritanceState,
        persistentClass,
        entityBinder,
        propertyHolder,
        elementsToProcess,
        idPropertiesIfIdClass,
        mappings
    );

    if ( !isIdClass ) {
      entityBinder.setWrapIdsInEmbeddedComponents( elementsToProcess.getIdPropertyCount() > 1 );
    }

    processIdPropertiesIfNotAlready(
        inheritanceStatePerClass,
        mappings,
        persistentClass,
        entityBinder,
        propertyHolder,
        classGenerators,
        elementsToProcess,
        subclassAndSingleTableStrategy,
        idPropertiesIfIdClass
    );

    if ( !inheritanceState.hasParents() ) {
      final RootClass rootClass = ( RootClass ) persistentClass;
      mappings.addSecondPass( new CreateKeySecondPass( rootClass ) );
    }
    else {
      superEntity.addSubclass( ( Subclass ) persistentClass );
    }

    mappings.addClass( persistentClass );

    //Process secondary tables and complementary definitions (ie o.h.a.Table)
    mappings.addSecondPass( new SecondaryTableSecondPass( entityBinder, propertyHolder, clazzToProcess ) );

    //add process complementary Table definition (index & all)
    entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Table.class ) );
    entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Tables.class ) );

  }
View Full Code Here

TOP

Related Classes of org.hibernate.cfg.annotations.EntityBinder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.