COMPLEX TYPE OBJECTS -> JAVA MAPPING

COMPLEX TYPE OBJECTS  -> JAVA MAPPING


PROCEDURE link_user_cards(p_cards IN t_product_card_coll) IS
 BEGIN
   CORE_PRODUCT.map_cards(p_cards);
 END;


CREATE OR REPLACE TYPE T_PRODUCT_CARD_COLL IS TABLE OF T_PRODUCT_CARD


CREATE OR REPLACE TYPE T_PRODUCT_CARD   UNDER  T_PRODUCT (


 PAN_MASK       VARCHAR2(32),
 LIMIT_ID       NUMBER,
 IS_SMS_ENABLED NUMBER,
 USE_3D_SECURE  NUMBER,
 MBR            INTEGER,
 CARD_TYPE      INTEGER,
 ACCOUNTS       T_PRODUCT_ACCOUNT_COLL
)


CREATE OR REPLACE TYPE T_PRODUCT  IS  OBJECT(


 ID VARCHAR2(100 CHAR),
 NAME VARCHAR2(100 CHAR),
 TYPE INTEGER,
 SYSTEM VARCHAR2(10 CHAR),
 STATUS INTEGER
) NOT FINAL
alter type T_PRODUCT add attribute AMOUNT NUMBER cascade










-----JAVA SIDE----


@Override
public void loadUserCardsOnAccount(List<CardType> card) throws SQLException {
  try {
      loadContext();


      ocstmt = prepareCallProcedure(Env.getDBApiScheme(), "api_product.link_user_cards(?)");
      setArray(1, ProductMapping.getCardArray(oconn, card), ConstTypes.CARD_COLL);
      ocstmt.execute();
  } finally {
      releaseAllResources();
  }
}

public static Array getCardArray(OracleConnection connection, List<CardType> cards) throws SQLException {
  if (CommonUtils.isListEmptyOrNull(cards))
      return null;


  Struct[] structs = new Struct[cards.size()];


  int idx = 0;
  for(CardType card : cards) {
      structs[idx++] = getCardStruct(connection, card);
  }
  return connection.createOracleArray(ConstTypes.CARD_COLL, structs);
}


private static Struct getCardStruct(OracleConnection connection, CardType card) throws SQLException {
  Object[] structs = getCardStructFields(connection, card);
  return connection.createStruct(ConstTypes.CARD, structs);
}


private static Object[] getCardStructFields(OracleConnection connection, CardType card) throws SQLException {
  return new Object[] {
          card.getId(),
          card.getName(),
          card.getType(),
          card.getSystem(),
          card.getStatus(),
          card.getAmount(),
          card.getPan(),
          card.getLimitId(),
          card.getSmsEnabled(),
          card.getUse3DSecure(),
          card.getMbr(),
          card.getCardType(),
          getAccountArray(connection, card.getAccounts())
  };
}


public static Array getAccountArray(OracleConnection connection, List<AccountType> accounts) throws SQLException {
  if (CommonUtils.isListEmptyOrNull(accounts))
      return null;


  Struct[] structs = new Struct[accounts.size()];
  int idx = 0;
  for(AccountType account : accounts) {
      structs[idx++] = getAccountStruct(connection, account);
  }
  return connection.createOracleArray(ConstTypes.ACCOUNT_COLL, structs);
}


public static Struct getAccountStruct(OracleConnection connection, AccountType account) throws SQLException {
  return connection.createStruct(ConstTypes.ACCOUNT, getAccountStructFields(account));
}


private static Object[] getAccountStructFields(AccountType product) {
  return new Object[] {
          product.getId(),
          product.getName(),
          product.getType(),
          product.getSystem(),
          product.getStatus(),
          product.getAmount(),
          product.getAccount(),
          product.getOverdraft(),
          product.getCurrency()
  };
}

Yorumlar

Bu blogdaki popüler yayınlar

İNGİLİS DİLİNDƏ ƏN ÇOX İSTİFADƏ OLUNAN 2600 CÜMLƏ QƏLİBLƏRİ VƏ 6000 SÖZ

INGILIS DILI BUTUN ZAMANLAR