我正在使用Android应用程序,该应用程序可以自己为实体生成唯一标识符。
在每个实体创建之前,我们为对象分配一个新ID。我们目前正在做类似的事情:
IDGenerator.assignCodeFor(entity);
dao.create(entity);
我知道OrmLite有某种generateId id方案,但似乎该功能是为处理数据库序列而设计的(例如:PostgreSQL SERIAL数据类型和mysql' AUTO_INCREMENT)。
我已经调查了自定义的DataPersister,但我想出了一些我感觉不舒服的工作环境。
TLDR;
所以我的问题是:如何使用OrmLite以编程方式为我的实体生成自定义ID?
我正在寻找类似拦截器或战略模式的东西。
答案 0 :(得分:0)
如何使用OrmLite以编程方式为我的实体生成自定义ID?
我认为您的示例代码正在执行此操作,对吧?所以你的问题确实是:
如何让ORMLite自定义为我的实体生成ID。
简短的回答是它无法做到这一点。 ORMLite不生成ID,数据库是。但是,有一些方法可以在您自己的代码中更好地完成此任务。
我扩展DAO然后覆盖dao.create(...)
方法,以便为实体分配ID,然后调用super.create(...)
。 id
字段显然是@DatabaseField(id = true)
而不是generatedId = true
。
您可以使用getId()
和setId(...)
方法,并在您的实体字段中使用useGetSet = true
。然后在实体的getId()
内部,它将测试id字段是否为null
并且将在那时生成id值。那么当ORMLite询问对象以在实体上设置id字段时,它将被生成然后插入到数据库中。
您当然也可以拥有一个为您创建实体的实用程序类和/或方法。除非你记得当然一直使用它,否则这并不一定有帮助。
你能在实体构造函数中创建id吗?我怀疑没有,但我想我会把它添加进去考虑。