Impossibile creare SQLMAP per persistenza di persistenza con Cairngorm Persistence Library
-
28-10-2019 - |
Domanda
Sto cercando di creare un oggetto client di persistenza nel modo seguente:
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 );
Il problema che sto riscontrando è che la proprietà "mappa" di SQLMAP rimane non recuperabile anche se esiste un array "_maps" valido all'interno dell'oggetto SQLMAP.
maps [] (@b812d09)
[0] Object (@b103d61)
createRepoFileTable com.adobe.cairngorm.persistence.api.grammar.Create (@b103a91)
length 1
Quando si tenta di eseguire Crea Table SQL, la fabbrica di istruzione si lamenta:
Error: SQLERROR0014: Statement 'createRepoFileTable' not found in SQL map
In qualche modo la classe SQLMAP non è in grado di copiare le proprietà dell'oggetto passato ad essa alla proprietà Map usando la classe ObjectUlil.
Non voglio usare un file MXML e non voglio anche usare Spicelib come nell'esempio.
Cosa sto facendo di sbagliato qui?
Soluzione
Quindi ho capito che nel mio caso in qualche modo le chiamate nella classe SQLMAP ai componenti Spicelib non funzionavano:
var classInfo:ClassInfo=ClassInfo.forInstance(source);
var properties:Array=classInfo.getProperties();
L'array delle proprietà era sempre vuoto.
Tuttavia, ho preso la persistenza del codice sorgente di Lib e ho modificato il ciclo in Objecutil per ripassare direttamente le proprietà dell'oggetto:
for (var propertyName:String in source)
Ora funziona, anche se non sono davvero felice di aver modificato la classe Objecutil ... forse qualcuno ha una migliore presa su questo.