问题标签 [greendao-generator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
798 浏览

android - 与不是主键的列建立关系

我目前正在从 ORMlite 切换到 GreenDao,并且在 greendao 中创建我的数据库模型时遇到了麻烦。

我的内容是从服务器获取的,服务器将生成的主键条目标识为字符串。我的内部数据库的主键为 Long(如 Android 要求)。

当我同步时,我需要根据服务器提供的键(此处为“backendId”)创建关系,以使我的同步方式更容易。

在 ORMlite 中,我可以说应该使用哪一列来创建关系。我尝试为 greendao 创建相同的内容,但失败了。

这是我的尝试:一个部门可以拥有资产。“assetId”应该包含存储在 Asset 的“backendId”中的值。

有什么想法可以实现吗?

该插入的结果是,“assetId”是资产表的主键,但我需要它是“backendId”。

有任何想法吗?

0 投票
1 回答
990 浏览

android - greenDao:在 Android 上将数据存储在 sqlite 文件中

将数据存储在位于 Android 智能手机文件系统上的 sqlite 文件中的推荐方法是什么?我打算在设备重启后恢复数据。“DaoMaster.createAllTables(db, true)”和“DaoMaster.createAllTables(db, false)”有什么区别?

目前我在 MainActivity.java 中使用此代码:

我不得不修改生成的 DaoMaster.java:

0 投票
1 回答
6572 浏览

android - android greendao 仅更新实体中的特定字段

我一直在寻找解决我的问题的方法,但没有成功。

我有一个应用程序,在该应用程序中,我从不同的服务接收数据库中特定实体的信息,因此我使用 greenDAOs insertOrReplace 方法,因此只要实体已经存在于我的数据库中,它就会被更新而不是重新创建。

到目前为止,一切都很好。

问题是......例如,假设我的实体被称为用户,具有字段 id、title 和 displayName。

因此,在第一次调用中,我得到了一个 JSON 对象,其中包含一个只有其 id 和 title 字段的用户,所以我将它插入到数据库中,并且自然地将 displayName 插入为 NULL。

之后从另一个服务我得到另一个包含相同用户(相同 id 字段)的 JSON,但它也带有 displayName,但根本不包括标题信息。

因此,每当我在 greenDAO 自动生成的 DAO 对象上运行 insertOrReplace 时,用户都会更新,但由于标题信息不存在,当它更新时,标题字段会重置为 NULL,所以我最终会丢失数据。

不幸的是,我无法更改从服务返回的数据,也无法解决此问题。我很难相信没有简单的方法可以告诉 DAO 对象只更新某些字段而不是全部。

我正在查看由 greenDAO 生成的代码,在生成的 dao 对象中有一个 bindValues 方法,该方法在执行查询之前被调用,显然它从对象中过滤掉了 NULL 属性,但无论哪种方式,它都会使用 NULL 进行更新价值。

通过从父类添加一些方法来修改最终生成的 dao 对象,我能够提出某种修复方法,但我认为这不是一个好的解决方案,因为我必须对所有 dao 执行此操作对象。(我知道可以定义一个自定义超类,但这仅适用于实体对象,而不适用于 DAO 对象)。

如果有人对我如何解决这个问题有任何想法,我将不胜感激,并且对于冗长的解释感到抱歉,我只是想明确我的问题。

谢谢。

0 投票
1 回答
596 浏览

greendao - 如何持久化 HashMap?

如何在 greenDAO 中持久化 HashMap 以及如何生成相应的实体?

我已经前后两次阅读了文档,但没有任何内容。谷歌也没有任何帮助。

0 投票
1 回答
2445 浏览

android - GreenDao IndsertOrReplaceInTx 只插入列表的最后一项

我有一些 POJOS 并为它们创建了一些表。它们都运行良好,这意味着我可以插入它们并加载它们......除了这个:

我的品牌列表包含 6 个元素,我很确定它们是不同的(放置断点并看到它们)但是当我将它们插入 DB 时,greenDao只插入最后一个元素。我的表是空的,这个语句应该填满它。

代码:

生成的品牌代码:

创建模式的代码:

最后我如何插入它们:

我设置断点并检查我的brandlist,它有 6 个元素。

任何帮助,解决方法,调试提示......我真的不知道问题是什么。

非常感谢!!

编辑:

我创建了非常非常简单(相信我真的很简单:-))测试项目,它从文件中读取 json,将其解析为列表并将其插入到 db 中,并且存在问题。谁能告诉我我的错误是什么?非常感谢 :-)。

0 投票
0 回答
431 浏览

eclipse - 将 greenDAO 从 eclipse 导入 Android studio 1.0 RC 2

我有一个相当大的 Eclipse 项目,它使用 greenDAO,我想将它导入到 android studio。

这样做我遇到了很多麻烦。首先使用 android studio import 它包含了与我相关的其他项目和库,但没有导入 dao。我比手动添加了 greendao 项目,它找到了模块:DaoCore、DaoGenerator 和 DaoExampleGenerator 我添加了对模块的依赖,但我只是得到构建错误:

错误:任务 ':name:dexDebug' 执行失败。

com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\Android\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --output path\build\ intermediates\dex\debug --input-list=path\build\intermediates\tmp\dex\debug\inputList.txt 错误代码:2 输出:UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files defined lde/greenrobot/daogenerator/DaoGenerator;在 com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 在 com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 在 com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:535) 在 com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 在 com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 在 com.android。 dx.command.dexer.Main。

未找到所有三个模块。并且greendao的java文件中的所有include都被忽略了。

我在谷歌上搜索你需要对 gradle 进行一些更改,但那是针对新项目而不是现有的大项目。

请帮忙。

0 投票
2 回答
681 浏览

android - Android greenDAO - 原始数据类型

我想问一下是否有一种方法可以将原始数据类型用作带有greenDAO的表字段?如果是,代码示例将不胜感激。

谢谢

0 投票
1 回答
710 浏览

android - 无法生成小写的greenDao实体

我在我的项目中使用 GreenDao 库,当我想从 DB 读取时遇到问题,它给了我android.database.sqlite.SQLiteException: no such table.

我知道发生这种情况的原因。这是因为当我生成方案并添加这样的实体时:addEntity("userX")生成的表是USER_X.

问题是我已经从资产加载了数据库,而表名是userX,不是USER_X。我在greendao 文档中读到:For example, a property called “creationDate” will become a database column “CREATION_DATE”.

我的问题是如何更改这些默认值?我在文档中搜索了解决方案,但没有找到任何解决方案。我的问题有解决方案吗?

谢谢

0 投票
0 回答
570 浏览

java - GreenDao gets me data that I can't see in database

I'm developing a Hotel-booking app and I use greenDao.

I create a Hotel entity. This is the entry in my MyGreenDaoGenerator:

As you can see, there is no "pictures" node. But I know Hotels have pictures, so I create a Pictures entity and relate it to hotels

Easy.

In the greenDAO-generated "Hotel.java" now I get a suitable property:

Now I run my app and get some hotels from a webservice. Hotels include a Pictures node with a picture.

Now, in the self-generated Hotel.java and HotelDao.java I can't see any method about setting a picture. I just have these:

What I expect is one of the followings:

  • GreenDAO is clever enough to see that there's a picture node in my Hotel object and saves it in the database
  • GreenDAO is not clever enough. Pictures don't get saved in DB, should do that manually

What happens is that when I switch to the show-me-the-data activity, I see the picture. And I do after this:

  1. I get hotels from DB

    hotelsList = (ArrayList) daoSession.getHotelDao().queryRaw(", hotel_agreements A WHERE A.HOTEL_ID = T.HOTEL_ID AND A.AGREEMENT_ID bla bla bla... no mention of HotelPictures here");

  2. Show the pictures

    hotel.getPictures()

This leads to the before mentioned method, where the condition "if (pictures == null)" is evaluated and pictures is not null at all! It contains my HotelPicture object!

This seems to confirm my first idea: greenDAO is clever, saw the picture node and saved it in DB.

Too bad is that, if I do inspect the database, I see the hotels but don't see any pictures record

Inspecting my SQLite DB, Hotels is full while HotelPictures is empty

So, HOW does GreenDAO access this data, if they're not saved in the database? I'm getting crazy because it seems to me I'm losing the whole point of having a DAO, which means to me Objects and Relations mapped to Java objects, not Java objects mapped some-to-database-and-some-wherever.

Could anybody please help me to understand where I'm failing?

Thank you

0 投票
2 回答
4395 浏览

android - greenDAO:未找到 ftl 模板

我正在使用适用于 Android 的 greenDAO,并且我想编辑 greenDAO 生成器,因为它会覆盖 @SerializedName,这是我每次更改数据库上的某些内容时 GSON 需要的。

所以我通过 File -> New -> Import Module... 将https://github.com/greenrobot/greenDAO中的greenDAO 添加到我的 Android Studio 项目中......并且刚刚选择了 GreenDaoGenerator 模块。

接下来,我构建我的 java 模块来生成 greenDAO 数据库,该数据库使用 GreenDaoGenerator 模块作为依赖项,我得到一个异常,即找不到模板 dao.ftl。

有人可以帮帮我吗?我是Android新手,不检查,为什么找不到文件。

编辑:这是项目结构的屏幕截图。我希望它有所帮助。

在此处输入图像描述