我一直在尝试使用GreenDAO创建数据库模型.当我尝试在不同的表之间创建多个关系时,问题就出现了.
基本上,我有一张Message桌子,一张Conversation桌子和一张User桌子.
用户有一个消息列表,并且消息具有父对话.
我尝试编写此代码来创建数据库:
private static void addUser(Schema schema) {
user = schema.addEntity("User");
userId = user.addIdProperty().getProperty();
user.addStringProperty("facebookId").unique().index();
user.addStringProperty("firstName");
user.addStringProperty("lastName");
user.addStringProperty("fullName");
user.addStringProperty("photoUrl");
}
private static void addMessage(Schema schema) {
message = schema.addEntity("Message");
messageId = message.addIdProperty().getProperty();
message.addStringProperty("messageId").primaryKey();
message.addDateProperty("date");
message.addStringProperty("content");
message.addStringProperty("typeString");
}
private static void addConversation(Schema schema) {
conversation = schema.addEntity("Conversation");
conversation.addIdProperty();
conversation.addStringProperty("conversationId");
// REST OF THE CODE
}
private static void fakeRelationship(Schema schema) {
Property author = message.addLongProperty("author").getProperty();
Property parent = message.addLongProperty("parent").getProperty();
message.addToOne(user, author);
message.addToOne(conversation, parent); …Run Code Online (Sandbox Code Playgroud) 我有两个使用Greendao生成器生成的实体.这两个实体是医院和患者.医院和患者之间存在一对多的关系.因此,一家医院可以有多名患者,一名患者只能有一家医院.因此,医院将包含患者名单.
greendao Generator的代码是 - >
package com.myapp.generator;
import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Property;
import org.greenrobot.greendao.generator.Schema;
import org.greenrobot.greendao.generator.ToMany;
public class MyClass {
public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.example.mohit.greendaotest.db");
Entity hospital = schema.addEntity("Hospital");
hospital.addIdProperty().autoincrement();
hospital.addStringProperty("Hospital_Name");
Entity patient=schema.addEntity("Patient");
patient.addIdProperty().autoincrement();
patient.addStringProperty("Patient_Name");
Property hospitalId = patient.addLongProperty("hospitalId").getProperty();
// patient has a one assigned hospital
patient.addToOne(hospital, hospitalId);
// hospital has many patients
ToMany hospitalToPatients = hospital.addToMany(patient, hospitalId);
hospitalToPatients.setName("patients");
DaoGenerator dg=new DaoGenerator();
dg.generateAll(schema,"./app/src/main/java");
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在我的主要活动中,我创建了一个名为"Hospital 1"的医院对象和两个名为"Patient 1"和"Patient 2"的患者对象.现在这两名患者将"医院1"作为他们的相关医院.patient1.getHospital()将返回Hospital1对象,patient2.getHospital()也将返回Hospital1对象.Hospital1.getPatient()将返回包含patient1和patient2对象的患者列表.
我的活动代码是 …
有没有办法让greendao吐出查询进入Logcat?我只想安慰一切正常工作,这对于熟悉系统来说是一个很好的功能.
我正在寻找使用Swagger与Android上的设备上数据库,理想情况下使用GreenDAO和改造,但我愿意使用什么有效.
该应用程序将需要一个持久数据库,并与使用swagger的服务器同步/通信.我正在寻找方法来使用swagger的代码生成与设备上的数据库,而不是手动定义模型.
是否有一个swagger codegen库或项目将与Android ORM(最好是greendao)一起使用?我还没有找到任何东西,但看起来并没有太久.
否则,我将尝试为与DaoGenerator一起使用的模型制作/修改.mustache文件.它可能需要两个步骤来更新模型,但这比手动重新创建模型更容易.
也欢迎其他想法和建议!
有没有办法让DB以自动方式创建ID属性?
我想生成一些看起来像这样的东西:
Entity entity = schema.addEntity("MyEntity");
entity.addIdProperty().autoIncrement().primaryKey();
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我刚下载了GreenDao的新jar文件,以便为我正在构建的应用程序创建我的数据库.
在完成我的实体建模和它们之间的连接的所有过程之后,我尝试运行生成器项目,但是生成数据库的行出现了这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: freemarker/template/ObjectWrapper
at com.glide.talk.glide.model.generator.Model.main(Model.java:29)
Caused by: java.lang.ClassNotFoundException: freemarker.template.ObjectWrapper
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
Run Code Online (Sandbox Code Playgroud)
发生的行是:new DaoGenerator().generateAll(schema, src);我在buildpath和lib文件夹中只有greendao-generator-1.3.0.jar文件.
任何想法或解决方案都会非常有帮助.
ps 是否可以使用版本1.2中的freemaker.jar?
编辑:目前,我从sourceforge下载了这个版本,我希望这实际上是我需要使用的.
当我创建如下所示的双向1:n关系时,生成器不对表使用任何FOREIGN KEY(...)约束.
entity customer = schema.addEntity("Customer");
customer.addIdProperty();
customer.addStringProperty("name").notNull();
Entity order = schema.addEntity("Order");
order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
order.addIdProperty();
Property orderDate = order.addDateProperty("date").getProperty();
Property customerId = order.addLongProperty("customerId").notNull().getProperty();
order.addToOne(customer, customerId);
customer.addToMany(order, customerId);
Run Code Online (Sandbox Code Playgroud)
这是正常的吗?是应该在表中生成FOREIGN KEY(...)约束还是仅在运行时通过代码强制执行?
我想问一下,如果我在创建greenDao数据库时有可能添加默认值?
Example:
Property pictureIdProperty = user.addLongProperty("pictureId").getProperty();
Property thumbnailIdProperty = user.addLongProperty("thumbnailId").getProperty();
//and here I need something like this:
//thumbnailIdProperty.setDefault(-1); //there is possible to add
user.addToOne(picture, pictureIdProperty);
user.addToOne(picture, thumbnailIdProperty, "thumbnail");
Run Code Online (Sandbox Code Playgroud)
当我使用数据库和这个表时,我不需要在创建此模型时始终添加默认值.
我使用GreenDAO设置了一个新项目,能够使用DaoGenerator使用ExampleDAO生成.一切正常.
我还在android资源文件夹中提供了一个预先填充的sqlite数据库,在app运行时,它被复制到android数据库系统路径.
现在我想与SqlCipher集成,以加密我的数据库...如果有人可以帮助或提供示例应用程序,那将是一个很大的帮助.
我打算GreenDAO在我的项目中使用.我已经通过创建测试项目来测试它.但是,我有几个要求,我需要完成.
我的应用程序的数据库将被加密.为此,我们计划使用SQLCipher.我找到了这个链接.我正在研究它,但有兴趣知道原始的GreenDAO项目有什么可用.
由于我的应用程序将数据与服务器同步,我将使用SyncAdapter,因为我不想自己完成所有的重量级操作,这已经由Android框架完成.但它需要Content Provider合作.那么,我如何使用GreenDAO Content Provider.
更新2
我的项目有七个实体.我用过addContentProvider()实体.并生成七个不同的内容提供商.有没有办法在单个内容提供商中拥有所有sqlite表?