No se puede crear SQLMAP para PersistenceClient con la Biblioteca de persistencia de Cairngorm
-
28-10-2019 - |
Pregunta
Estoy tratando de crear un objeto cliente de persistencia de la siguiente manera:
var create:Create = new Create();
create.sql = "CREATE TABLE IF NOT EXISTS REPOFILE( REPOFILEID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, CHECKSUM TEXT, BYTES INTEGER, CREATED INTEGER, UPDATED INTEGER, ISDIRECTORY INTEGER )";
var sqlMap:SqlMap = new SqlMap( { createRepoFileTable : create } );
connectionManager = new ConnectionManagerFactory().createConnectionManager();
persistenceClient = new PersistenceClient( sqlMap, connectionManager );
El problema que estoy encontrando es que la propiedad "mapa" del SQLMAP no se puede recuperar a pesar de que hay una matriz "_maps" válida dentro del objeto SQLMAP.
maps [] (@b812d09)
[0] Object (@b103d61)
createRepoFileTable com.adobe.cairngorm.persistence.api.grammar.Create (@b103a91)
length 1
Al intentar ejecutar la Tabla Crear SQL, la fábrica de instrucciones se queja:
Error: SQLERROR0014: Statement 'createRepoFileTable' not found in SQL map
De alguna manera, la clase SQLMAP no puede copiar las propiedades del objeto que se le pasó a la propiedad MAP utilizando la clase Objectutil.
No quiero usar un archivo MXML y tampoco quiero usar Spicelib como en el ejemplo.
¿Qué estoy haciendo mal aquí?
Solución
Así que descubrí que en mi caso de alguna manera las llamadas en la clase SQLMAP a los componentes de Spicelib no funcionaban:
var classInfo:ClassInfo=ClassInfo.forInstance(source);
var properties:Array=classInfo.getProperties();
La matriz de propiedades siempre estaba vacía.
Sin embargo, tomé el código fuente de Persistence Lib y cambié el bucle en el ObjectuTil para repasar las propiedades del objeto directamente:
for (var propertyName:String in source)
Ahora funciona, aunque no estoy muy feliz de haber modificado la clase Objectutil ... tal vez alguien tenga una mejor opinión sobre esto.