/**
  * 参照動作を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param propertyMeta プロパティメタデータ
  * @param foreignKeyDesc 外部キー記述
  */
 protected void doReferetialAction(
     EntityMeta entityMeta, PropertyMeta propertyMeta, ForeignKeyDesc foreignKeyDesc) {
   ReferentialConstraint referentialConstraint = getReferentialConstraint(propertyMeta);
   if (dialect.supportsReferentialDeleteRule()) {
     foreignKeyDesc.setOnDelete(referentialConstraint.onDelete());
   }
   if (dialect.supportsReferentialUpdateRule()) {
     foreignKeyDesc.setOnUpdate(referentialConstraint.onUpdate());
   }
 }
  public ForeignKeyDesc getForeignKeyDesc(EntityMeta entityMeta, PropertyMeta propertyMeta) {
    if (!propertyMeta.isRelationship() || propertyMeta.getMappedBy() != null) {
      return null;
    }
    ReferentialConstraint referentialConstraint =
        propertyMeta.getField().getAnnotation(ReferentialConstraint.class);
    if (referentialConstraint == null) {
      if (!regardRelationshipAsFk) {
        return null;
      }
    } else {
      if (!referentialConstraint.enable()) {
        return null;
      }
    }

    ForeignKeyDesc foreignKeyDesc = new ForeignKeyDesc();
    doColumn(entityMeta, propertyMeta, foreignKeyDesc);
    doTable(entityMeta, propertyMeta, foreignKeyDesc);
    doReferetialAction(entityMeta, propertyMeta, foreignKeyDesc);
    return foreignKeyDesc;
  }