Articles of greendao

将自定义代码添加到greenDAO实体

我想为我的greenDAO实体添加一些自定义代码。 我看到有类似保护区的东西。 但我不喜欢将生成的类检入我的git存储库。 我想为此使用inheritance。 即我有一个实体User 。 所以我希望greenDAO生成一个名为UserBase的类。 我想通过User扩展并实现这样的方法: public String getFullName() { return this.first + ” ” + this.last; } first和last是托管属性。 但我不知道如何告诉greenDAO使用User类而不是生成的实体UserBase 。 有没有办法做到这一点?

如何使用GreenDao ORM库从Android中的Assets创建数据库

我正在使用GreenDao orm库来创建数据库,它与代码中的第一个创建数据库示例一起使用。 现在问题是我找不到任何文档或任何与数据库从资产文件夹复制到内存中数据库相关的内容。

尝试为GreenDAO运行DaoGenerator时出现NoClassDefFoundError

我有一个Android项目,使用Android Studio 2.3,它使用GreenDAO生成与SQLite数据库交互的类。 DaoGenerator项目之前总是工作……但今天我只需要向实体添加2列/属性,每当我尝试运行生成器项目时,我都会收到以下错误: Exception in thread “main” java.lang.NoClassDefFoundError: org/greenrobot/greendao/generator/Schema at com.company.daogenerator.ProjectDaoGenerator.main(ProjectDaoGenerator.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: java.lang.ClassNotFoundException: org.greenrobot.greendao.generator.Schema at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 我在我的应用程序的Gradle文件中使用GreenDAO 3.2.0: compile ‘org.greenrobot:greendao:3.2.0’ 此外,在DaoGenerator的Gradle文件中: apply plugin: ‘java’ dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile ‘org.greenrobot:greendao-generator:3.2.0’ } 我的ProjectDaoGenerator.java文件: package […]

GreenDao支持多列的唯一约束

GreenDao是否支持多列的唯一约束? 相当于以下内容: create table projects ( _id integer primary key autoincrement, project_type text, name text, unique (project_type, name) );

使用greendao for android的多对多编译错误

问题解决了! – 我在底部添加了我的解决方案。 我认为这是一个相当简单的问题,但我似乎无法在文档中find答案。 我正在尝试使用greendao为android建模多对多关系,但是在运行生成器项目后,我在主项目中遇到编译错误。 我的代码指定了关系和实体: Entity customer = schema.addEntity(“Customer”); customer.addIdProperty(); customer.addStringProperty(“firstName”).notNull(); customer.addStringProperty(“lastName”).notNull(); customer.addDateProperty(“birthDate”); customer.addStringProperty(“phoneNumber”); customer.addStringProperty(“address”); customer.addStringProperty(“email”); // Product Entity product= schema.addEntity(“Product”); product.addIdProperty(); product.addIntProperty(“colour”).notNull(); product.addIntProperty(“weight”).notNull(); // CustomerProduct Entity customerProduct = schema.addEntity(“CustomerProduct”); customerProduct.addIdProperty(); Property customerId = customerProduct.addLongProperty(“customerId”).notNull().getProperty(); customer.addToOne(customerProduct , customerId); ToMany customerProductToCustomers = customerProduct.addToMany(customer, customerId); customerProductToCustomers.setName(“customers”); Property productId = customerProduct.addLongProperty(“productId”).notNull().getProperty(); product.addToOne(customerProduct , productId); ToMany customerProductToProducts = […]

Android中的DBFlow与GreenDao orm库

我将为一个应用程序选择一个DAO库,该应用程序在SQLite表中存储大量关系的数据。 我首先选择GreenDao,因为它被积极地用于许多着名的应用程序,并且相当陈旧,经过良好测试并且修复了错误。 其中DBFlow使用注释处理(注释在编译时解析,因此编译时间将增加)并允许用户决定模型缓存,有时certificate比GreenDao更快(仅在某些情况下)。 但是DBFlow可能没有留下一些漏洞或者一些场景被发现,因为它没有在像GreenDao这样的众多应用中被积极使用。 (对不起!我有点假设)。 “从性能到代码处理,数据库迁移和未来的模型更改,哪一个更好”。 先来看看: GreenDao的表现 DBFlow与DBFLow的比较 引导我。 请。

GreenDAO左加入

考虑我有一个模型:公司1 – N人 我想显示一个名单和公司名称的人员名单。 但并非每个人都有公司。 我要避免每次调用person.getCompany()产生一个新的SQL查询,所以我在考虑添加一个连接: QueryBuilder queryBuilder = session.getPersonDao().queryBuilder(); queryBuilder.join(PersonDao.Properties.CompanyId, Company.class); queryBuilder.list() 问题是我只得到公司的人,因为生成的查询使用的JOIN等同于INNER JOIN。 我想我还需要LEFT JOIN才能让没有公司的人得到。 现在看来GreenDAO似乎不支持LEFT JOIN。 有没有其他方法来做出请求而不进行原始查询?

GreenDao深度查询n:m关系

我在我的应用程序中有一个这样设计的关系: 我试图选择至少有一个用户作为朋友的所有聊天。 基本上,我想执行这个查询: SELECT c.* FROM CHAT c, USER u, UserChats uc WHERE c.type = myType AND u.isFriend = 1 AND c.id = uc.chatId AND u.id = uc.userId 我还没有find办法在GreenDao图书馆中执行此操作,并希望有人能够帮助我。 编辑: 这就是我现在所拥有的: List list = usersChatsDao.queryDeep( “WHERE T0.” + UserDao.Properties.isFriend.collumnName + ” = ? “+ “AND T1.” + ChatDao.Properties.type.collumName + ” = ?”, new String[] {“1”, […]

如何将多个greenDAO Tx操作组合成一个事务?

我的应用程序使用远程REST API并使用greenDao填充本地数据库。 我有AsyncTask类的服务: @Override protected Void doInBackground(Void… params) { insert100RowsIntheFirstTable(); insert100RowsIntheSecondTable(); } 在每个insert-method中我都有insertOrReplaceInTx,我主要用它来提高性能。 如果任何方法无法检索数据,我需要放弃结果。 它应该通过同一个交易来完成。 我想知道在方法中使用mDaoSession.callInTx(callable)时,使用mDaoSession.callInTx(callable)来包围我的插入方法调用是否正确。 我对吗? 另外,如果引发exception,我如何放弃交易 – 是否通过greenDao自动完成?

greendao字符串主键 – 如何使用

在greendao常见问题解答中,它说“从greenDAO开始,对String主键的支持有限。” http://greendao-orm.com/documentation/technical-faq/ 我找不到任何说明如何做到这一点。 我使用Guids作为服务器应用程序中的主键,并希望能够从Android设备远程生成新数据并将其上传回服务器。 android设备上的数据库是sqlite,使用greenDAO生成POJO和数据访问层。 当数据上传到服务器时,我使用Guids来避免主键冲突。 我将Guids存储为字符串。 在greendao网站上有一些建议说我应该创建一个包含字符串的辅助字段并仍然使用greendao所支持的长主键,但这意味着当我从服务器导入数据时,我必须重新连接所有数据库关系对于痛苦的应用程序。 如果可能的话,更愿意继续使用字符串主键。 谁能告诉我怎么做? 这是一些示例代码…… 在我的生成器中(为清晰起见,我删除了大部分字段): private static void addTables(Schema schema) { Entity unit = addUnit(schema); Entity forSale = addForSale(schema); Property unitIntId = forSale.addLongProperty(“unitIntId”).getProperty(); forSale.addToOne(unit, unitIntId); } private static Entity addForSale(Schema schema) { Entity thisEntity = schema.addEntity(“ForSale”); thisEntity.addIdProperty(); thisEntity.addStringProperty(“forSaleId”); thisEntity.addFloatProperty(“currentPriceSqFt”); thisEntity.addStringProperty(“unitId”); return thisEntity; } private static Entity addUnit(Schema schema) […]