更新具有外部集合的数据库对象?

时间:2012-06-21 18:59:28

标签: android ormlite foreign-collection

我正在考虑如何解决这个问题。我有一个ORMlite对象,可以属于多个类别;我正在使用另一个表(即ForeignCollection)来跟踪我的对象和类别之间的多对多连接。

问题是,如果我使用更改的类别更新对象,则会添加新类别,但不会删除旧类别。

update method of DAO的JavaDoc中,我看到了这个文字:

  

注意:通常,这不会保存对外来对象所做的更改   到外国收藏。

我的问题是关于“典型”一词的使用。这是否意味着通过某种设置可以确保更新更新相关的外部对象/集合?

或者我应该阅读句子,好像“通常”不存在,假设没有自动方法,并且我需要在提交每个对象以删除旧类别时运行额外的查询?

3 个答案:

答案 0 :(得分:2)

OrmLite不会自动将对象保存到ForeignCollections。您必须自己存储和删除这些对象。如果您在注释中设置了正确的参数,Ormlite将自动为您检索ForeignCollection中的对象。

Ormlite是“精简版”。它做ORM,但不完全。它不是JPA或Hibernate。

答案 1 :(得分:2)

  

问题是,如果我使用更改的类别更新对象,则会添加新类别,但不会删除旧类别。

所以你有一个具有外国类别集合的对象:

@ForeignCollectionField
ForeignCollection<Category> categories;

如果您运行categories.add(category1)categories.remove(category1),那么底层集合应使用内置DAO从其关联表中删除它们。

如果您正在以其他方式更改类别列表,那么您将不得不直接使用Category删除categoryDao条目。

  

...关于使用“通常”这个词。这是否意味着通过某种设置可以确保更新更新相关的外部对象/集合?

不知道为什么我在那里留下“典型”这个词。我认为这是一个考虑各种自动创建,自动刷新等字段设置的一揽子声明 - 我不确定。无论如何,我已经从代码库中删除了它。

ORMLite无法知道外来物体是否已被更改。它不会创建魔术代理对象或会话,因此它可以告诉外部对象何时更新。你必须明确你想要更新的内容。 documentation on foreign collections非常明确。

答案 2 :(得分:0)

我通过直接将新类别添加到表类别来解决此问题,而不是向Object的foreignCollection添加新类别。 这可以通过简单地创建类别和添加新元素来完成。 为了创建与对象的关系,需要newCategory.setObject(object)

希望这有帮助。

相关问题