使用OrmLite生成自定义ID

时间:2015-06-29 15:35:46

标签: android ormlite id-generation

我正在使用Android应用程序,该应用程序可以自己为实体生成唯一标识符。

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

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

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

我已经调查了自定义的DataPersister,但我想出了一些我感觉不舒服的工作环境。

TLDR;

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

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

1 个答案:

答案 0 :(得分:0)

  

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

我认为您的示例代码正在执行此操作,对吧?所以你的问题确实是:

  

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

简短的回答是它无法做到这一点。 ORMLite不生成ID,数据库是。但是,有一些方法可以在您自己的代码中更好地完成此任务。

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

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

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

  4. 你能在实体构造函数中创建id吗?我怀疑没有,但我想我会把它添加进去考虑。