public class org.hibernate.id.ForeignGenerator implements org.hibernate.id.IdentifierGenerator, org.hibernate.id.Configurable
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.hibernate.id.ForeignGenerator
  super_class: java.lang.Object
{
  private static final org.hibernate.internal.CoreMessageLogger LOG;
    descriptor: Lorg/hibernate/internal/CoreMessageLogger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private java.lang.String entityName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String propertyName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 38
            ldc Lorg/hibernate/id/ForeignGenerator;
            invokestatic org.hibernate.internal.CoreLogging.messageLogger:(Ljava/lang/Class;)Lorg/hibernate/internal/CoreMessageLogger;
            putstatic org.hibernate.id.ForeignGenerator.LOG:Lorg/hibernate/internal/CoreMessageLogger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hibernate.id.ForeignGenerator this
         0: .line 37
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hibernate/id/ForeignGenerator;

  public java.lang.String getEntityName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hibernate.id.ForeignGenerator this
         0: .line 49
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.entityName:Ljava/lang/String;
            areturn
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hibernate/id/ForeignGenerator;

  public java.lang.String getPropertyName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hibernate.id.ForeignGenerator this
         0: .line 58
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
            areturn
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hibernate/id/ForeignGenerator;

  public java.lang.String getRole();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.hibernate.id.ForeignGenerator this
         0: .line 68
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual org.hibernate.id.ForeignGenerator.getEntityName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 46
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual org.hibernate.id.ForeignGenerator.getPropertyName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hibernate/id/ForeignGenerator;

  public void configure(org.hibernate.type.Type, java.util.Properties, org.hibernate.service.ServiceRegistry);
    descriptor: (Lorg/hibernate/type/Type;Ljava/util/Properties;Lorg/hibernate/service/ServiceRegistry;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.hibernate.id.ForeignGenerator this
        start local 1 // org.hibernate.type.Type type
        start local 2 // java.util.Properties params
        start local 3 // org.hibernate.service.ServiceRegistry serviceRegistry
         0: .line 74
            aload 0 /* this */
            aload 2 /* params */
            ldc "property"
            invokevirtual java.util.Properties.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            putfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
         1: .line 75
            aload 0 /* this */
            aload 2 /* params */
            ldc "entity_name"
            invokevirtual java.util.Properties.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            putfield org.hibernate.id.ForeignGenerator.entityName:Ljava/lang/String;
         2: .line 76
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
            ifnonnull 4
         3: .line 77
            new org.hibernate.MappingException
            dup
            ldc "param named \"property\" is required for foreign id generation strategy"
            invokespecial org.hibernate.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 79
      StackMap locals:
      StackMap stack:
            return
        end local 3 // org.hibernate.service.ServiceRegistry serviceRegistry
        end local 2 // java.util.Properties params
        end local 1 // org.hibernate.type.Type type
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0             this  Lorg/hibernate/id/ForeignGenerator;
            0    5     1             type  Lorg/hibernate/type/Type;
            0    5     2           params  Ljava/util/Properties;
            0    5     3  serviceRegistry  Lorg/hibernate/service/ServiceRegistry;
    Exceptions:
      throws org.hibernate.MappingException
    MethodParameters:
                 Name  Flags
      type             
      params           
      serviceRegistry  

  public java.io.Serializable generate(org.hibernate.engine.spi.SharedSessionContractImplementor, java.lang.Object);
    descriptor: (Lorg/hibernate/engine/spi/SharedSessionContractImplementor;Ljava/lang/Object;)Ljava/io/Serializable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=9, args_size=3
        start local 0 // org.hibernate.id.ForeignGenerator this
        start local 1 // org.hibernate.engine.spi.SharedSessionContractImplementor sessionImplementor
        start local 2 // java.lang.Object object
         0: .line 84
            aload 1 /* sessionImplementor */
            checkcast org.hibernate.Session
            astore 3 /* session */
        start local 3 // org.hibernate.Session session
         1: .line 86
            aload 1 /* sessionImplementor */
            invokeinterface org.hibernate.engine.spi.SharedSessionContractImplementor.getFactory:()Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokeinterface org.hibernate.engine.spi.SessionFactoryImplementor.getMetamodel:()Lorg/hibernate/metamodel/spi/MetamodelImplementor;
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.entityName:Ljava/lang/String;
            invokeinterface org.hibernate.metamodel.spi.MetamodelImplementor.entityPersister:(Ljava/lang/String;)Lorg/hibernate/persister/entity/EntityPersister;
            astore 4 /* persister */
        start local 4 // org.hibernate.persister.entity.EntityPersister persister
         2: .line 87
            aload 4 /* persister */
            aload 2 /* object */
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyValue:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 5 /* associatedObject */
        start local 5 // java.lang.Object associatedObject
         3: .line 88
            aload 5 /* associatedObject */
            ifnonnull 7
         4: .line 89
            new org.hibernate.id.IdentifierGenerationException
            dup
         5: .line 90
            new java.lang.StringBuilder
            dup
            ldc "attempted to assign id from null one-to-one property ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual org.hibernate.id.ForeignGenerator.getRole:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         6: .line 89
            invokespecial org.hibernate.id.IdentifierGenerationException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 95
      StackMap locals: org.hibernate.Session org.hibernate.persister.entity.EntityPersister java.lang.Object
      StackMap stack:
            aload 4 /* persister */
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyType:(Ljava/lang/String;)Lorg/hibernate/type/Type;
            astore 7 /* propertyType */
        start local 7 // org.hibernate.type.Type propertyType
         8: .line 96
            aload 7 /* propertyType */
            invokeinterface org.hibernate.type.Type.isEntityType:()Z
            ifeq 11
         9: .line 98
            aload 7 /* propertyType */
            checkcast org.hibernate.type.EntityType
            astore 6 /* foreignValueSourceType */
        start local 6 // org.hibernate.type.EntityType foreignValueSourceType
        10: .line 99
            goto 12
        end local 6 // org.hibernate.type.EntityType foreignValueSourceType
        11: .line 102
      StackMap locals: org.hibernate.id.ForeignGenerator org.hibernate.engine.spi.SharedSessionContractImplementor java.lang.Object org.hibernate.Session org.hibernate.persister.entity.EntityPersister java.lang.Object top org.hibernate.type.Type
      StackMap stack:
            aload 4 /* persister */
            new java.lang.StringBuilder
            dup
            ldc "_identifierMapper."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.propertyName:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyType:(Ljava/lang/String;)Lorg/hibernate/type/Type;
            checkcast org.hibernate.type.EntityType
            astore 6 /* foreignValueSourceType */
        start local 6 // org.hibernate.type.EntityType foreignValueSourceType
        12: .line 108
      StackMap locals: org.hibernate.id.ForeignGenerator org.hibernate.engine.spi.SharedSessionContractImplementor java.lang.Object org.hibernate.Session org.hibernate.persister.entity.EntityPersister java.lang.Object org.hibernate.type.EntityType org.hibernate.type.Type
      StackMap stack:
            aload 6 /* foreignValueSourceType */
            invokevirtual org.hibernate.type.EntityType.getAssociatedEntityName:()Ljava/lang/String;
        13: .line 109
            aload 5 /* associatedObject */
        14: .line 110
            aload 1 /* sessionImplementor */
        15: .line 107
            invokestatic org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved:(Ljava/lang/String;Ljava/lang/Object;Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)Ljava/io/Serializable;
            astore 8 /* id */
        start local 8 // java.io.Serializable id
        16: .line 112
            goto 24
        end local 8 // java.io.Serializable id
        17: .line 113
      StackMap locals:
      StackMap stack: org.hibernate.TransientObjectException
            pop
        18: .line 114
            getstatic org.hibernate.id.ForeignGenerator.LOG:Lorg/hibernate/internal/CoreMessageLogger;
            invokeinterface org.hibernate.internal.CoreMessageLogger.isDebugEnabled:()Z
            ifeq 23
        19: .line 115
            getstatic org.hibernate.id.ForeignGenerator.LOG:Lorg/hibernate/internal/CoreMessageLogger;
        20: .line 116
            ldc "ForeignGenerator detected a transient entity [%s]"
        21: .line 117
            aload 6 /* foreignValueSourceType */
            invokevirtual org.hibernate.type.EntityType.getAssociatedEntityName:()Ljava/lang/String;
        22: .line 115
            invokeinterface org.hibernate.internal.CoreMessageLogger.debugf:(Ljava/lang/String;Ljava/lang/Object;)V
        23: .line 120
      StackMap locals:
      StackMap stack:
            aload 3 /* session */
            aload 6 /* foreignValueSourceType */
            invokevirtual org.hibernate.type.EntityType.getAssociatedEntityName:()Ljava/lang/String;
            aload 5 /* associatedObject */
            invokeinterface org.hibernate.Session.save:(Ljava/lang/String;Ljava/lang/Object;)Ljava/io/Serializable;
            astore 8 /* id */
        start local 8 // java.io.Serializable id
        24: .line 123
      StackMap locals: java.io.Serializable
      StackMap stack:
            aload 3 /* session */
            aload 0 /* this */
            getfield org.hibernate.id.ForeignGenerator.entityName:Ljava/lang/String;
            aload 2 /* object */
            invokeinterface org.hibernate.Session.contains:(Ljava/lang/String;Ljava/lang/Object;)Z
            ifeq 26
        25: .line 125
            getstatic org.hibernate.id.IdentifierGeneratorHelper.SHORT_CIRCUIT_INDICATOR:Ljava/io/Serializable;
            areturn
        26: .line 128
      StackMap locals:
      StackMap stack:
            aload 8 /* id */
            areturn
        end local 8 // java.io.Serializable id
        end local 7 // org.hibernate.type.Type propertyType
        end local 6 // org.hibernate.type.EntityType foreignValueSourceType
        end local 5 // java.lang.Object associatedObject
        end local 4 // org.hibernate.persister.entity.EntityPersister persister
        end local 3 // org.hibernate.Session session
        end local 2 // java.lang.Object object
        end local 1 // org.hibernate.engine.spi.SharedSessionContractImplementor sessionImplementor
        end local 0 // org.hibernate.id.ForeignGenerator this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   27     0                    this  Lorg/hibernate/id/ForeignGenerator;
            0   27     1      sessionImplementor  Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            0   27     2                  object  Ljava/lang/Object;
            1   27     3                 session  Lorg/hibernate/Session;
            2   27     4               persister  Lorg/hibernate/persister/entity/EntityPersister;
            3   27     5        associatedObject  Ljava/lang/Object;
           10   11     6  foreignValueSourceType  Lorg/hibernate/type/EntityType;
           12   27     6  foreignValueSourceType  Lorg/hibernate/type/EntityType;
            8   27     7            propertyType  Lorg/hibernate/type/Type;
           16   17     8                      id  Ljava/io/Serializable;
           24   27     8                      id  Ljava/io/Serializable;
      Exception table:
        from    to  target  type
          12    16      17  Class org.hibernate.TransientObjectException
    MethodParameters:
                    Name  Flags
      sessionImplementor  
      object              
}
SourceFile: "ForeignGenerator.java"