GreenDAO: almacena la lista de entidades en otra entidad

Estoy jugando con GreenDAO y creo que me gusta la forma en que funciona. No me gusta escribir código SQL, por lo que esto me ayudará a evitarlo;)

Pero aún así, creo que realmente es muy 'sql' basado en el pensamiento de cómo configurarlo. No estoy seguro de si esto es una cosa mala (para saber cómo funcionan las cosas), pero prefiero decir: aquí está mi objeto! ¡Guárdalo! Pero aún no he encontrado nada para esto …

Pero bueno, lo que estoy haciendo es una especie de lo siguiente: Tengo un objeto, digamos una estantería. Puse algunos libros en la estantería.

Esto sería algo así como:

class BookShelve { List<Book> books; void add(Book b) { books.add(b); } } BookShelve bs = new BookShelve(); Book b1 = new Book(); Book b2 = new Book(); Book b3 = new Book(); bs.add(b1); bs.add(b2); bs.add(b3); 

Ok, ahora quiero almacenar esto usando GreenDAO. ¿Necesito usar 'addToMany' para esto? Asi que:

 Property bookDataProperty = bookData.addLongProperty("bookShelve").getProperty(); ToMany books = BookShelve.addToMany(bookData, bookDataProperty); books.setName("Books"); 

Y luego hacer un:

 bs.getBooks() 

¿para conseguirlos? ¿O hay un mejor camino?

Creo que debería hacerse así, pero todavía no estoy completamente convencido.

Ps: puede haber typo en el código de arriba, sólo lo escribí aquí, no lo han compilado 🙂

Edit: Esto surgió después de que le di el 'respuesta' comprobar:

Así que, para agregar libros a una estantería, necesito:

 b1.setBookShelve(bs.getId()); daoSession.insert(b1); 

¿derecho?

Creo que no tienes que saber SQL, pero tendrás que conocer el conocimiento básico de la base de datos y ser claro para tu modelo ER, que creo que ya tienes.

Si utiliza greenDAO e implementa la relación entre Book y BookShelf , no necesita conservar la lista de libros de su biblioteca BookShelf.

En su DaoGenerator.java, simplemente declara el esquema

  Entity bookShelf = schema.addEntity("BookShelf"); bookShelf.addIdProperty(); Entity book = schema.addEntity("Book"); book.addIdProperty(); book.addStringProperty("name"); Property bookFKShelves = book.addLongProperty("bookShelf_id").notNull().getProperty(); book.addToOne(bookShelf, bookFKShelves); bookShelf.addToMany(book, bookFKShelves); 

Una vez que genere el código. Úsalos en tu código de Android:

  DevOpenHelper helper = new DaoMaster.DevOpenHelper(this.getActivity(), "BookStore", null); db = helper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); BookDao mBookDao = mDaoSession.getBookDao(); BookShelfDao mBookShelfDao = mDaoSession.getBookShelfDao(); // Insert BookShelf bs = new BookShelf(); Book b1 = new Book(); b1.setName("B1"); b1.setBookShelf(bs); Book b2 = new Book(); b2.setName("B2"); b2.setBookShelf(bs); Book b3 = new Book(); b3.setName("B3"); b3.setBookShelf(bs); mBookDao.insert(b1); mBookDao.insert(b2); mBookDao.insert(b3); mBookShelfDao.insert(bs); // Select for(BookShelf bss :mBookShelfDao.loadAll()){ for (Book b :bss.getBookList()) Lod.d(TAG,"Book Name: "+b.getName()); } 

Básicamente no necesita saber sql para greendao:

Simplemente defina sus entidades (clases de objetos) y las relaciones entre ellas.

A su pregunta:

Hay dos posibilidades:

  • Bookshelve puede contener muchos libros y un libro sólo puede estar en una estantería: Su enfoque es correcto.
  • Estantería puede contener muchos libros y un libro puede estar en muchas estanterías: Debe definir una emtity bookshelve2book que almacena las parejas.
  • Entidad Greendao cuando se serializa utilizando GSON no contiene entidad relacionada en Generated JSON cadena
  • Cómo limpiar / eliminar base de datos greenDao
  • Uso de DAO verde con el proveedor de contenido
  • ¿Cómo carga todos los campos de una base de datos y ordeno el resultado después de una fila con GreenDao?
  • GreenDAO con Sqlcipher Ejemplo de Integración
  • GreenDAO 40 segundos para insertar 600 registros
  • Consulta SQLite de Android con clave externa utilizando la tormenta o una alternativa
  • Adición de código personalizado a entidades greenDAO
  • GreenDAO no genera restricción FOREIGN KEY (...) en la tabla
  • Múltiples relaciones toMany con una sola tabla
  • Android GreenDao - Sólo elimina objetos en caché de una entidad específica
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.