0

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

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

在DAO 更新方法的 JavaDoc 中,我看到以下文本:

注意:通常这不会保存对外部对象或外部集合所做的更改。

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

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

4

3 回答 3

2

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

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

于 2012-06-21T19:45:32.183 回答
2

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

因此,您有一个具有外部类别集合的对象:

@ForeignCollectionField
ForeignCollection<Category> categories;

如果您运行categories.add(category1)or categories.remove(category1),则基础集合应使用内置 DAO 从其关联表中删除这些集合。

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

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

不知道为什么我把“通常”这个词留在那里。我认为考虑到各种自动创建、自动刷新等字段设置是一个笼统的声明——我不确定。无论如何,我已将其从代码库中删除。

ORMLite无法知道异物是否已被更改。它不会创建魔术代理对象或会话,因此它可以判断何时更新了外部对象。您必须明确说明您想要什么时候更新。关于外国收藏的文档对此非常明确。

于 2012-06-22T13:16:36.763 回答
0

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

希望这可以帮助。

于 2013-12-10T15:27:15.987 回答