1

我正在开发一个 Android 应用程序,它有自己的方式为实体生成唯一标识符。

在每个实体创建之前,我们为我们的对象分配一个新的 ID。我们目前正在做这样的事情:

IDGenerator.assignCodeFor(entity);
dao.create(entity);

我知道 OrmLite 有某种generateId id方案,但似乎该功能是为处理数据库序列而设计的(例如:PostgreSQL SERIAL 数据类型和 mysql 的 AUTO_INCREMENT)。

我已经研究过定制的 DataPersister,但我想出了一些我觉得不舒服的解决方法。

TLDR;

所以我的问题是:如何使用 OrmLite 以编程方式为我的实体生成自定义 ID?

我正在寻找类似拦截器或策略模式的东西。

4

1 回答 1

0

如何使用 OrmLite 以编程方式为我的实体生成自定义 ID?

我认为您的示例代码正在这样做,对吗?所以你的问题是:

如何让 ORMLite 自定义为我的实体生成 ID。

简短的回答是它没有办法做到这一点。ORMLite 没有生成 ID,数据库是。但是,当然有一些方法可以让您在自己的代码中做得更好。

  1. 我会扩展 DAO,然后覆盖该dao.create(...)方法,以便它为实体分配 ID,然后调用super.create(...). 该id领域显然是@DatabaseField(id = true)而不是generatedId = true

  2. 您可以使用getId()andsetId(...)方法并useGetSet = true在您的实体字段上使用。然后在getId()实体内部,它会测试 id 字段是否存在null并且会在那个时刻生成 id 值。因此,当 ORMLite 询问对象以在实体上设置 id 字段时,它会被生成然后插入到数据库中。

  3. 您当然也可以只拥有一个为您创建实体的实用程序类和/或方法。除非您当然记得一直使用它,否则这不一定有帮助。

  4. 您可以在实体构造函数中创建 id 吗?我怀疑没有,但我想我会添加它以供考虑。

于 2015-06-30T17:33:56.097 回答