Generador greenDAO da error de consola que no tiene sentido
Soy bastante nuevo en el desarrollo de Android en general, y nunca he utilizado greenDAO. Pero después de pasar un montón de tiempo trabajando en mi clase de generador (donde yo modelo mis entidades), finalmente fue capaz de producir algo que se parecía al ejemplo dado en GitHub.
import de.greenrobot.daogenerator.DaoGenerator; import de.greenrobot.daogenerator.Entity; import de.greenrobot.daogenerator.Property; import de.greenrobot.daogenerator.Schema; import de.greenrobot.daogenerator.ToMany; public class simbalDAOgen { public static void main(String[] args) throws Exception { Schema schema = new Schema(1, "com.bkp.simbal"); //Schema(Int version, String package name) addCBTrans(schema); //Add the entities to the schema new DaoGenerator().generateAll(schema, "../Simbal/src-gen", "../Simbal/src-test"); //Generate DAO files } private static void addCBTrans(Schema schema){ Entity checkbook = schema.addEntity("Checkbook"); checkbook.addIdProperty(); checkbook.addStringProperty("name").notNull(); checkbook.addDateProperty("dateModified"); checkbook.addStringProperty("balance"); // Use a string property because BigDecimal type should be used for currency Entity transaction = schema.addEntity("Transaction"); transaction.setTableName("TRANS"); // "TRANSACTION" is a reserved SQLite keyword transaction.addIdProperty(); transaction.addStringProperty("name"); transaction.addStringProperty("category"); Property transDate = transaction.addDateProperty("date").getProperty(); transaction.addStringProperty("amount"); // Again use string for BigDecimal type transaction.addStringProperty("notes"); Property cbName = transaction.addStringProperty("cb").notNull().getProperty(); //What checkbook the transaction is in ToMany cbToTrans = checkbook.addToMany(transaction, cbName); //Actually ties the transactions to their correct checkbooks cbToTrans.setName("Transactions"); cbToTrans.orderAsc(transDate); } }
Entonces corrí el código como una aplicación de Java para generar mis archivos DAO, al igual que la documentación sobre greenDAO dice. Los archivos se generaron correctamente, sin embargo, obtuve esta línea en la consola de Eclipse:
- NoClassDefFoundError al usar greenDao
- Usar swagger con una base de datos de android
- Cómo integrar greenDAO con JSON Jackson y manejar mapeo de muchas a muchas relaciones
- GreenDAO 40 segundos para insertar 600 registros
- usando la daga para inyectar la base de datos junto con el gcm que recuperará datos de la base de datos
Warning to-one property type does not match target key type: ToMany 'Transactions' from Checkbook to Transaction
Realmente no estoy seguro si necesito estar preocupado desde que los archivos fueron generados. Pero lo que no entiendo es por qué hay mención de una relación "a-uno" cuando estoy usando una relación "a-muchos", como se puede ver en mi código. (Puede haber muchas entidades de transacciones en una entidad de talonarios de cheques, y tengo la intención de usar el nombre de cada libro de cheques para atar las transacciones a él).
¿Necesito volver atrás y arreglar una parte de mi código? Por favor pregunte si necesito aclarar cualquier cosa, y gracias por su tiempo!
- Rendimiento ORM: ¿es greenDAO más rápido que ORMLite?
- Adición de código personalizado a entidades greenDAO
- Greendao 3 genera contentprovider
- Cómo hacer una relación bidireccional uno-a-uno por GreenDAO?
- ¿Cómo puede obtener la parte superior de los registros de GreenDAO?
- Verde DAO vs ORM lite vs Android activo
- Forma adecuada para agregar columnas de índice en greenDao?
- El grupo de conexiones no ha podido conceder una conexión a subproceso
Después de mirar los archivos generados por greenDAO, he encontrado la solución a mi problema. Me parece que el método addToMany () espera que una propiedad Long se le pase a ella y estaba usando una propiedad String. Así que cambié estas dos líneas en mi código de generador:
Property cbName = transaction.addStringProperty("cb").notNull().getProperty(); ToMany cbToTrans = checkbook.addToMany(transaction, cbName);
a esto:
Property checkbookId = transaction.addLongProperty("checkbookId").notNull().getProperty(); ToMany cbToTrans = checkbook.addToMany(transaction, checkbookId);
Que resolvió mi problema. Yo estaba bajo la impresión de que podía usar cualquier tipo de propiedad para atar las transacciones a la chequera, así que estaba tratando de usar el nombre de chequera.
Parece ser GreenDao sólo acepta tipo largo como clave extranjera
- Obtener el contexto de PopupMenu como ContextMenu
- Obteniendo el último código de github a Android Studio